使用相等运算符比较两个被填充的双精度数是否安全?

4 .net c# floating-point equality

我知道你永远不应该使用==.NET中的相等运算符来比较浮点值,但是如果这两个数字使用Math.Floor

我正在使用映射程序,并且地图块存储在不同的"区域"文件中.我可以通过将世界坐标除以16来确定要检索的区域,并将结果放在地板上,从而获得区域坐标.

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

Joh*_*zen 5

浮点比较的一般问题是它们很容易产生舍入误差.当你取一个像1.2(不能精确表示为十进制)的值时,将它乘以100并比较它的相等性120.建议总是比较差异如下:

var a = 1.2;
a *= 100;

if (a - 120 < 0.0001)
{
}
Run Code Online (Sandbox Code Playgroud)

Math.Floor但是,该操作总是产生整数值.也就是说,任何小数值都将被截断,并且将保留精确的整数值.

所以,如果你的语义真的是使用地板,那么你就是安全的.

但是,如果您真的想要舍入,那么请使用Math.Round().