4 .net c# floating-point equality
我知道你永远不应该使用==
.NET中的相等运算符来比较浮点值,但是如果这两个数字使用Math.Floor
?
我正在使用映射程序,并且地图块存储在不同的"区域"文件中.我可以通过将世界坐标除以16来确定要检索的区域,并将结果放在地板上,从而获得区域坐标.
我基本上是在询问是否使用==
运算符将具有相同整数部分(例如4.3和4.8)的两个值进行比较.
浮点比较的一般问题是它们很容易产生舍入误差.当你取一个像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().