为什么0.575乘以100不等于57.5?

为什么57.5和57.5不一样呢?例如:

> b = 57.5
> print (57.5 == b)
true

> c = 0.575 * 100
> print (c)
57.5

> print (c == b)
false

> print (c, b)
57.5    57.5

所以即使c和b都是57.5,这两个数字也不相等。

可能存在舍入问题吗?但是如果真的是这样,这些数字不应该打印出不同的结果吗?

编辑: 很好,是否有一种方法可以在LUA中打印实际值?例如,如果我想打印57.4999999999 ...等值?

点赞
用户721269
用户721269

这是固定精度小数算术中 (1/3) * 3 不会给出与 1 相同结果的原因。在固定精度小数中没有一种表示可以乘以 3 来得到 1

它们输出相同,因为打印代码会对输出进行四舍五入。你想让 (1/3) * 3 输出 .999999999999999 还是 1

试试这个:

b = 57.5
c = 0.575 * 100
print (string.format("b = %.24f", b))
print (string.format("c = %.24f", c))

输出是:

b = 57.500000000000000000000000
c = 57.499999999999992894572642
2013-11-20 19:23:06
用户2907532
用户2907532
b=57.499999999999996
c = 0.575 * 100
print (c==b)

这将返回True。 实际上,如果你输入.575

"%.17f" % 0.575

它将返回 0.57499999999999996

2013-11-20 19:27:07
用户828255
用户828255

针对您编辑过的问题,如何以更高的精度打印数字,使用 printf 和 C 中大致相同。

> =string.format('%.17f', 0.1)
0.10000000000000001

请参阅 此问题

至于与浮点数有关的问题,在其他地方已经多次涉及。有一条有信息量的链结在评论中,我将在此处复制:http://floating-point-gui.de/

2013-11-20 19:45:03