Oracle中的BINARY_DOUBLE和Java中的Double使用IEEE 754标准。
但是它们的准确性有所不同。
例如值:
456.67天
甲骨文:
declare
a BINARY_DOUBLE := 456.67d;
begin
SYS.DBMS_OUTPUT.PUT_Line(TO_CHAR(a,'9.99999999999999999999EEEE'));
end;
结果:4.56670000000000020000E + 02
Java:
Double d = 456.67d;
DecimalFormat formatter = new DecimalFormat("0.000000000000000000000E000");
System.out.println(formatter.format(d));
结果:4.566700000000000000000E002
Java中的值不如Oracle中的值准确。
在线转换器表示456.67d的最准确表示是:
4.56670000000000015916157281026E2
那么,为什么Java中的准确性与Oracle中的准确性不同?
以及如何在Java中获得更准确的价值?
最佳答案
使用BigDecimal:
Double d = 456.67d;
BigDecimal bd = new BigDecimal( d );
bd.setScale( 50 );
System.out.println( bd );
DecimalFormat formatter = new DecimalFormat("0.000000000000000000000E000");
System.out.println( formatter.format( bd ) );
输出:
456.67000000000001591615728102624416351318359375
4.566700000000000159162E002