2016-04-26 2 views
1

Я пытаюсь получить число цифр после десятичной точки в значении BigDecimal.Как получить точное десятичное значение из bigdecimal в java

BigDecimal big = new BigDecimal(1231235612.45); 
    String[] str = big.toPlainString().split("\\."); 

    System.out.println(" Decimal Value: " + str[1]); 

С помощью этого я получаю следующий вывод - десятичное Значение: 4500000476837158203125. Actualy Я хочу показать только 45 согласно оригиналу BigDecimal value (1231235612.45). Итак, мой ожидаемый результат: Десятичное значение: 45. Но при преобразовании он добавляет больше цифр после десятичных точек. Есть ли какой-либо метод или код для получения точного значения из BigDecimal?

+0

Короче говоря: используйте 'String' конструктор вместо этого. – Tunaki

+0

Скорее всего, вы хотели 'BigDecimal.valueOf (1231235612.45);' или 'new BigDecimal (« 1231235612.45 »);' –

ответ

2

Не используйте двойной конструктор BigDecimal (см. Javadoc, он обескуражен).

использование конструктора String

new BigDecimal("1231235612.45"); 

или использовать MathContext

new BigDecimal(1231235612.45, MathContext.DECIMAL64); 
+2

@Nilesh. Причина, по которой не использовать двойной конструктор, заключается в том, что 1231235612.45 помещается в 64-битный двойной, что не может точно представляют его в конечном числе бит, число 1231235612.4500000476837158203125 является самым близким к нему. Изменение значения на один бит дает число меньше 1231235612.45, но не так близко, как показано. – FredK

Смежные вопросы