为什么0.575 * 100与57.5不相同?

时间:2013-11-20 19:20:22

标签: lua

为什么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 ......?

3 个答案:

答案 0 :(得分:3)

同样的原因(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

答案 1 :(得分:3)

b=57.499999999999996
c = 0.575 * 100   
print (c==b)

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

"%.17f" % 0.575 

它返回0.57499999999999996。

答案 2 :(得分:2)

在回答您编辑的如何以更高精度打印数字的问题时,它与使用printf的C中的数字大致相同。

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

请同时参阅this question

关于浮点数的问题,过去曾在其他地方多次报道。评论中提供了一个信息性链接,我将复制here