为什么我的浮动被截断了?

ubi*_*con 2 java floating-point ieee-754

27.8675309IEEE 754转换器的"十进制表示"字段中输入一个值会更改我输入的值27.86753.同样,当解析具有相同值的字符串时,Java会丢弃最后两位数字.

Float.parseFloat("27.8675309") // Results in a float value of 27.86753
Run Code Online (Sandbox Code Playgroud)

我不确定IEEE转换器的"十进制表示"实际上是什么(它是浮点数吗?)但是我希望它能给出最大数量:

  1. 是浮点值
  2. 不超过我输入的原始值

我希望Java能够以类似的方式运行,也就是说,我希望上面的代码行返回一个浮点值等于27.8675308或者更大的浮点值,它更接近我的原始输入,而不是只丢弃小数位.我在这里错过了什么?

Aln*_*tak 9

这是预期的.

如果你看一下27.8675309的二进制表示(27.867530822753906为双):

01000001110111101111000010110100
Run Code Online (Sandbox Code Playgroud)

下一个最高值是:

01000001110111101111000010110101
Run Code Online (Sandbox Code Playgroud)

产生27.867533(27.86753273010254为双),下一个最低值为:

01000001110111101111000010110011
Run Code Online (Sandbox Code Playgroud)

产量27.867529(27.867528915405273为双)

a的尾数中没有足够的位Float来表示其间的任何值,因此您的值以十进制向下舍入为27.867530