Math.Round(myDouble)
会返回一个浮点double
,众所周知,double
的精度有限。因此,Math.Round
可能会返回比我们寻找的真实整数值稍大的或的值。
如果它返回稍大的值,则将结果转换为int
是安全的。例如:
Math.Round(19.5) -> 20.0000000000002 -> (int)20.0000000000002 -> 20
但是如果它返回稍微小一点的值,那么不将结果转换为int
是安全的。例如:
Math.Round(19.5) -> 19.9999999999998 -> (int)19.9999999999998 -> 19
这是正确的推理吗? 将Math.Round
的结果转换为整数是否始终不安全?
或换句话说,这会......
public static int ConvertToInt(double val)
{
return (int)Math.Round(val, 0, MidpointRounding.AwayFromZero);
}
...永远不会返回与此不同的价值......
public static int ConvertToInt(double val)
{
return Convert.ToInt32(Math.Round(val, 0, MidpointRounding.AwayFromZero));
}