gpt4 book ai didi

c# - 使用相等运算符比较两个 floored double 是否安全?

转载 作者:太空狗 更新时间:2023-10-30 00:16:49 25 4
gpt4 key购买 nike

我知道您永远不应该在 .NET 中使用 == 相等运算符比较浮点值,但是如果使用 Math.Floor< 对两个数字进行取整,那么这样做是否安全?

我正在使用 map 程序, map block 存储在不同的“区域”文件中。我可以通过将世界坐标除以 16 并对结果进行取整来确定要检索的区域,这会得到区域坐标。

我实质上是在询问两个具有相同整数部分的值(例如 4.3 和 4.8)是否会使用 == 运算符进行比较。

最佳答案

浮点比较的一般问题是它们很容易产生舍入误差。当您取一个像 1.2 这样的值(不能完全表示为小数)时,将它乘以 100 并比较它是否等于 120。建议始终像这样比较差异:

var a = 1.2;
a *= 100;

if (a - 120 < 0.0001)
{
}

但是,Math.Floor 操作总是产生一个整数值。也就是说,任何小数值都将被截断,而精确整数值将被保留。

因此,如果您的语义确实是使用地板,那么您是安全的。

但是,如果您真的想四舍五入,请改用 Math.Round()。

关于c# - 使用相等运算符比较两个 floored double 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com