Когда я выполнить следующий код:Java DecimalFormat потери точности при форматировании двойной
public class Test {
public static void main(String args[]){
DecimalFormat format = new DecimalFormat();
Double value = new Double(-1350825904190559999913623552.00);
StringBuffer buffer = new StringBuffer();
FieldPosition position = new FieldPosition(0);
format.format(new BigDecimal(value), buffer, position);
System.out.println(buffer);
}
}
Это правильно печатает -1,350,825,904,190,559,999,913,623,552
. У меня есть код, который проходит через много двойников, поэтому я не хочу, чтобы преобразование из double в bigdecimal. Я понял, что время обработки BigDecimal велико. Так что я делаю format.format(value, buffer, position)
И я вижу, что точность потеряна. Выход я получаю -1,350,825,904,190,560,000,000,000,000
.
Что я здесь делаю неправильно? Есть ли лучший способ справиться с этим и сохранить точность. Я не хочу иметь дело с BigDecimals, но просто работаю с десятичными знаками.
Любые предложения?
может быть, имеет смысл размещать код, который обеспечивает неправильные результаты тоже? –
Вы уверены, что это действительно имеет значение? Если у вас есть «Double value = new Double (0.1)», вы хотите увидеть полную точность (что «0,1000000000000000055511151231257827021181583404541015625')? – user2357112
@ user2357112 umm im, говорящий о больших количествах, таких как 1350825904190559999913623552.00 здесь. Так что да, это имеет значение. –