我怎样才能将double转换为最接近的整数值?

如何将double转换为最接近的int?

使用Math.round() ,可能与MidpointRounding.AwayFromZero一起使用

例如:

 Math.Round(1.2) ==> 1 Math.Round(1.5) ==> 2 Math.Round(2.5) ==> 2 Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3 
 double d = 1.234; int i = Convert.ToInt32(d); 

参考

手柄圆滑如此:

四舍五入到最接近的32位有符号整数。 如果值在两个整数之间,则返回偶数; 也就是4.5被转换为4,5.5被转换为6。

你也可以使用function:

 //Works with negative numbers now static int MyRound(double d) { if (d < 0) { return (int)(d - 0.5); } return (int)(d + 0.5); } 

根据架构,它要快几倍。

 double d; int rounded = (int)Math.Round(d); 

我知道这个问题很老,但我在寻找类似问题的答案时遇到了这个问题。 我想我会分享给我的非常有用的小费。

转换为int时,只需在向下转换之前将.5添加到您的值。 由于向下转换为int总是下降到较低的数字(例如(int)1.7 = 1),如果您的编号是.5或更高,则添加.5会将其提升到下一个编号,并且向下转换为int应该返回正确的值。 (例如(int)(1.8 + .5)= 2)

我希望这个答案对任何人都有帮助。

我正在开发一个运动一个Intbutton的科学计算器。 我发现以下是一个简单,可靠的解决scheme:

 double dblInteger; if( dblNumber < 0 ) dblInteger = Math.Ceiling(dblNumber); else dblInteger = Math.Floor(dblNumber); 

Math.Round有时会产生意想不到的结果,并且显式转换为整数(通过cast或Convert.ToInt …)经常会为更高精度的数字生成错误的值。 上述方法似乎总是工作。