Oracle中的BINARY_DOUBLE和Java中的Double使用IEEE 754標準。Oracle和Java中的double值之間的區別(IEEE 754)
但它們的準確性有所不同。
例如值:
456.67d
甲骨文:
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中的價值並不像甲骨文一樣精確。
在線轉換器說,456.67d最準確的表示是:
4.56670000000000015916157281026E2
那麼,爲什麼在Java中的精度是不一樣的像甲骨文? 而我如何才能在Java中獲得更準確的價值?