fpe*_*ele 1 java math floating-point double
可能重复:
双重计算产生奇数结果
我正在用Java编写一个处理大量双算术的程序.我最终到了需要添加0.6666666666666666和-0.666666666666667的地步.但是,我得到的答案是-3.3306690738754696E-16.
换一种说法,
double d1 = 0.6666666666666666;
double d2 = -0.666666666666667;
System.out.println(d1 + d2);
Run Code Online (Sandbox Code Playgroud)
打印出"-3.3306690738754696E-16".为什么会这样?
先感谢您.
doubles并不完全准确,并不是每个小数都能完美地表示为double(见本文).出于所有实际目的,-3.3306690738754696E-16是0*.但是,如果您需要更高的精度,请使用BigDecimal.请记住,这种替代方案不会像使用原始doubles 那样有效.您可以自行决定是否需要此级别的准确度并做出相应的选择.
*:显然,这个数字是不完全为零,但对于大多数现实世界中的计算和计算,值的那个小是不可小视的.以米为单位,该值小于质子和中子的直径 - 即非常小.这就是我所说的"出于所有实际目的".