Lua 有没有一种简单的方法来检查两个浮点数是否大致相等?
在LUA中,是否有方法检查其浮动是否近似相等?只需设置一个阈值。如果两个值之间的差值小于阈值,则将它们视为相等:Lua 有没有一种简单的方法来检查两个浮点数是否大致相等?,lua,floating-point,Lua,Floating Point,在LUA中,是否有方法检查其浮动是否近似相等?只需设置一个阈值。如果两个值之间的差值小于阈值,则将它们视为相等: a = 1.23456789 b = 1.23456777 threshold = 0.000001 diff = math.abs(a - b) -- Absolute value of difference print(diff < threshold) -- True if difference is less than threshold 您还可以比较它们的十进制
a = 1.23456789
b = 1.23456777
threshold = 0.000001
diff = math.abs(a - b) -- Absolute value of difference
print(diff < threshold) -- True if difference is less than threshold
您还可以比较它们的十进制表示形式:
function decimal(x)
return string.format("%.3f",x)
end
print(decimal(x)==decimal(y))
定义“近似相等”。(你说的“近似”是什么意思?)“接近但不完全”比如3位小数。试图测试两个浮点数是否彼此接近通常是算法设计有缺陷的标志。为什么要这样做?看看你真正想解决的问题是什么?这报告了一些非常接近的数字,例如1.23499999…和1.23500010…抱歉,我太快停止了一个数字。试试1.23449999…和1.234500010…重点是舍入将域划分为多个段,每个段舍入到一个特定的数字。无论哪里有从一段到另一段的过渡段,过渡段两侧的点彼此接近,但圆形到不同的数字。@EricPostChil,你当然是对的。小数位数相等的整个过程并不像看上去那么简单。尽管如此,我的代码确实给出了OP想要的正确答案:最多3位小数。用小数位数表示数字的接近度通常并不意味着用户希望在四舍五入到小数点后三位时两个数字相同。这通常意味着他们希望数字在小数点后第三位最多相差一个单位,也就是说,彼此之间的距离在.001以内。@EricPostphil,就像我说的,这并不简单。那由OP来决定。你对这个问题的评论是正确的。
function decimal(x)
return string.format("%.3f",x)
end
print(decimal(x)==decimal(y))