我怎样才能将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 …)经常会为更高精度的数字生成错误的值。 上述方法似乎总是工作。