在IEEE 754 Converter的“十进制表示”字段中输入27.8675309
之类的值会将我输入的值更改为27.86753
。同样,当解析具有相同值的字符串时,Java会丢弃最后两位数字。
Float.parseFloat("27.8675309") // Results in a float value of 27.86753
我不确定IEEE转换器的“十进制表示”实际上是什么(它是浮点数吗?)但是我希望它能给出最大的数字:
我希望Java能够以类似的方式运行,也就是说,我希望上面的代码行返回一个等于27.8675308
的浮点值或一个更接近原始输入的浮点数值而不只是删除小数位。我在这里缺少什么?
答案 0 :(得分:9)
这是预期的。
如果你看一下27.8675309的二进制表示(27.867530822753906为双):
01000001110111101111000010110100
下一个最高值是:
01000001110111101111000010110101
产生27.867533(27.86753273010254为双),下一个最低值为:
01000001110111101111000010110011
得到27.867529(27.867528915405273为双)
Float
的尾数中没有足够的位来表示其间的任何值,因此您的值以十进制向下舍入为27.867530
答案 1 :(得分:1)
正如Alnitak所说,你已经用完了。但是,您可以使用Double
来获得更高的精度。 Double
实现64位IEEE 754浮点,而Float
实现32位IEEE 754浮点。