我想用作2位小数的双精度值。但我认为我的值不正确。
1.965 =必须是1.97,但结果是1.96
我累了他们:
DROP TABLE #testTempTable
或DecimalFormat("0.00")
或DecimalFormat("#.##")
但结果没有改变。
谢谢..
NumberFormat.getInstance() / ..setMaximumFractionDigits(2)
答案 0 :(得分:1)
原因在于浮点数在内部被重复。它们的形式(二进制尾数)* 2 ^(二进制指数)。通常,任何十进制数都不能以二进制形式表示完全,因此在计算该表示时已经进行了一些舍入。
简而言之,您的数字1.965可能最终表示为小于1.965的二进制浮点数,当您的程序将其舍入到2位小数时,您会得到这种意外结果。
这里http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html全面概述了浮点运算的缺陷。