Первый абзац javadoc для BigDecimal гласит:
Неизменяемые знаковые числа с произвольной точностью. BigDecimal состоит из произвольного значения целочисленного целочисленного значения точности и 32-разрядной целочисленной шкалы. Если ноль или положительный, масштаб - это число цифр справа от десятичной точки. Если отрицательное значение, немасштабированное значение числа умножается на десять на силу отрицания шкалы. Таким образом, значение числа, представленного BigDecimal, (немасштабированное значение × 10-масштаб)
Может кто-нибудь объяснить, что это значит, особенно бит, начинающийся с "If negative", но предпочтительно все это? Я думаю, что "масштаб" означает числа после десятичной точки, но означает ли это, что "немасштабированный" - это остальная часть его?
Масштаб означает мощность десяти, по которой умножается величина числа. Мощность может быть положительной или отрицательной. Когда мощность отрицательна k, соответствующая отрицательная мощность десяти - это доля с 1 в числителе, а знаменатель - 10 k. Для этого просто положительный масштаб k означает умножение на 10 k раз; отрицательный масштаб -k означает деление на 10 k раз.
Вот некоторые примеры:
magnitude scale value
--------- ----- -------------
1.2345678 -3 0.0012345678
1.2345678 -2 0.012345678
1.2345678 -1 0.12345678
1.2345678 0 1.2345678
1.2345678 1 12.345678
1.2345678 2 123.45678
1.2345678 3 1234.5678
Примечание. Точка в приведенной выше величине подразумевается. BigDecimal
сохраняет величину числа как сколь угодно большое целое число.
BigDecimal
хранит два операнда (величину и масштаб) отдельно. Эти два значения вместе представляют фактическое значение BigDecimal
. Это представление позволяет BigDecimal
избегать хранения большого количества начальных и / или конечных нулей для действительно больших чисел или действительно маленьких чисел.
float
и / илиdouble
? Я имею в виду, как они хранятся.