检查浮点变量是否为整数的最可靠方法是什么?

ili*_*rit 1 c# floating-point isinteger

我可以想到几种方法,例如.

Convert.ToInt32(floatingPoint) - floatingPoint == 0;
Math.Truncate(floatingPoint) - floatingPoint == 0;
floatingPoint % 1 == 0;
Math.Floor(floatingPoint) == floatingPoint;
//etc...
Run Code Online (Sandbox Code Playgroud)

但哪种方法最可靠?

Guf*_*ffa 5

您不应检查精确相等为零,因为浮点数通常仅包含与您分配给它的数字最接近的可能近似值.

例如,类型可能表示的最接近42的值可能类似于42.00000000000000662,您仍然希望将其计为整数值.

取值和舍入值之间的差值,然后取其值的绝对值(这样它不是负数)并比较一个小值:

if (Math.Abs(Math.Round(floatingPoint) - floatingPoint) < 0.000001) ...
Run Code Online (Sandbox Code Playgroud)