Lua - 四舍五入到双精度数

math.sqrt(2) 的结果似乎是无理数,因此出现了以下情况:

> return  math.sqrt(2)
1.4142135623731
> return  math.sqrt(2) == 1.4142135623731
false

我如何使这个“无理数”变量与我以不同方式获取变量时一样(如上面的例子)?

点赞
用户3204551
用户3204551

这个变量不是无理数,而是浮点数,所以它甚至都不是真实存在的。(然而,2的平方根是无理数,因此不能被精确地表示。)

只需要使用更多的数字,字面上的舍入转换就可以工作了。IEEE双精度浮点值需要17个有效十进制数字来安全地表示它,而不是14个。

让我们看看当我们将数字1增加到最不重要的一位时会发生什么。('0x'表示数字是十六进制的。这对我来说更容易控制这个例子的位数。):

x = 0x1.0000000000001
> print(x == 1)
false
> print(('%.16g'):format(x))
1
> print(('%.17g'):format(x))
1.0000000000000002
2014-04-29 12:44:15