这是引用this question中的评论:
This code in Java produces 12.100000000000001 and this is using 64-bit doubles which can present 12.1 exactly. – Pyrolistical
这是真的吗?我觉得由于 float 表示为 2 的幂之和,因此无论您有多少位,都无法准确表示 12.1。但是,当我实现这两种算法并打印使用 (12.1, 3) 调用它们的结果时,我分别得到了他和我的:
12.10000000000000000000000000000000000000000000000000000000000000000000000000 12.1000000000000010000000000000000000000000000000000000000000000000000000000
我使用 String.format("%76f")
打印了这个。我知道零比必要的多,但我没有看到 12.1 中有任何舍入。
最佳答案
没有。正如其他人在他的评论后续中指出的那样,(有限数量的)2 次方的总和永远不会恰好等于 12.1。就像你不能用十进制精确表示 1/3 一样,无论你在小数点后使用多少位。
关于java - 12.1 可以精确地表示为一个 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1904321/