java - 为什么我的 float 被截断?

标签 java floating-point ieee-754

IEEE 754 Converter的“十进制表示”字段中输入一个值,例如27.8675309将我输入的值更改为 27.86753。同样,当解析具有相同值的字符串时,Java 会删除最后两位数字。

Float.parseFloat("27.8675309") // Results in a float value of 27.86753

我不确定 IEEE 转换器的“十进制表示形式”实际上是什么(它是 float 吗?),但我希望它能给我可能的最大数字:

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

我希望Java以类似的方式表现,也就是说,我希望上面的代码行返回一个等于27.8675308的浮点值,或者一个更接近于的更大的浮点值我的原始输入而不是仅仅删除小数位。我在这里缺少什么?

最佳答案

这符合预期。

如果查看 27.8675309 的二进制表示形式(27.867530822753906 作为 double 值):

01000001110111101111000010110100

下一个最高值是:

01000001110111101111000010110101

产生 27.867533(27.86753273010254 作为 double 值),下一个最小值是:

01000001110111101111000010110011

产生 27.867529 (27.867528915405273 作为 double )

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

关于java - 为什么我的 float 被截断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083905/

相关文章:

Java 打开 JFrame 内部的 URL

C:如何将 float 包装到区间 [-pi, pi)

java - 如何使用一个托管 bean 执行两种方法并将数据保存在变量中?

java - 并发中的意外行为 (Java)

javascript - 有什么好的 JavaScript 货币或十进制类吗?

floating-point - 为什么对 double 值的操作不能给出预期的结果?

c++ - 在 C++ 中使用不同的 IEEE 浮点舍入模式

c - floor() 和 ceil() 的可表示结果

Java:错误:变量可能尚未初始化

python float 到 in int 转换