Ответ 1
A BigDecimal
определяется двумя значениями: произвольным целым числом и 32-разрядной целочисленной шкалой. Значение BigDecimal
определяется как .
Точность:
precision - это количество цифр в немасштабированном значении. Например, для числа 123.45 возвращаемая точность равна 5.
Таким образом, точность указывает длину произвольного целого числа точности. Вот несколько примеров чисел с одинаковым масштабом, но различная точность:
- 12345/100000 = 0.12345//scale = 5, precision = 5
- 12340/100000 = 0.1234//scale = 5, precision = 4
- 1/100000 = 0,00001//scale = 5, precision = 1
В специальном случае, когда число равно нулю (т.е. 0.000), точность всегда равна 1.
Масштаб:
Если ноль или положительный, scale - это число цифр справа от десятичной точки. Если отрицательное значение, немасштабированное значение числа умножается на десять на силу отрицания шкалы. Например, шкала -3 означает, что значение немасштабированного значения умножается на 1000.
Это означает, что целое значение "BigDecimal" умножается на .
Вот несколько примеров одинаковой точности с разными шкалами:
- 12345 со шкалой 5 = 0.12345
- 12345 со шкалой 4 = 1.2345
- ...
- 12345 со шкалой 0 = 12345
- 12345 со шкалой -1 = 123450 †
BigDecimal.toString:
Метод toString
для BigDecimal
ведет себя по-разному на основе шкалы и precision
. (Спасибо @RudyVelthuis за указание на это.)
- Если
scale == 0
, целое число просто распечатывается как-есть. - Если
scale < 0
, всегда используется E-Notation (например, 5 scale -1 производит "5E + 1" ) - Если
scale >= 0
иprecision - scale -1 >= -6
получается простое десятичное число (например, 10000000 scale 1 производит "1000000.0" ) - В противном случае используется E-нотация, например. 10 scale 8 производит "1.0E-7", поскольку
precision - scale -1
равноменьше -6.
Дополнительные примеры:
- 19/100 = 0,19//целое = 19, шкала = 2, точность = 2
- 1/1000 = 0,0001//integer = 1, scale = 4, precision = 1