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