2015-04-27 3 views
4

Случай 1: В Java6 BigDecimal ("0.0050000") doubleValue() возвращает 0,0050, а в Java 8 возвращаемое значение равно 0,005Java BigDecimal.doubleValue между Java 6 и Java 8

Случай 2:. В Java6 BigDecimal ("0.0250000"). DoubleValue() возвращает 0.025, а в Java 8 возвращается значение 0.025

В случае 1: Java 6 возвращается с дополнительным конечным нолем .. Любая идея? Также как заставить Java 8 возвращать тот же результат, что и Java 6

+1

Как вы печатаете/визуализируете значение возвращенного двойника? – icza

+2

doubleValue() возвращает 'double', а не строку. Два двойника в случае 1 кажутся одинаковыми, кроме того, как вы их напечатали/отформатировали. См. DecimalFormat – ControlAltDel

+2

. Можете ли вы предоставить полный пример программы, которая производит другой вывод для Java 6 и 8. –

ответ

4

Существует разница в том, как работает System.out.println в java6 и java 8. Также мы говорим о двойниках, BigDecimal здесь не проблема. Мы можем упростить этот пример:

System.out.println(Double.toString(0.0050000)); 

Поскольку Println называет java.io.PrintStream # печати (двойной), а затем вызывает String.valueOf (d) вы можете проверить его в JDK.

Но java.lang.Double # ToString (двойной) выглядит по-разному в JDK6 и JDK8:

return FloatingDecimal.toJavaFormatString(d);  //JDK 6 
return new FloatingDecimal(d).toJavaFormatString();//JDK 8 

Я нашел некоторые проблемы JDK, которые были исправлены в Java 7 (Java 7 имеет такой же вывод, как в Java 8)

я, что этот вопрос может быть, причина:

http://bugs.java.com/view_bug.do?bug_id=6935102

http://bugs.java.com/view_bug.do?bug_id=7039369

http://bugs.java.com/view_bug.do?bug_id=7032154

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