如何将小数转换为整型?
当前回答
没有答案似乎处理OverflowException/UnderflowException来自试图转换int范围之外的小数。
int intValue = (int)Math.Max(int.MinValue, Math.Min(int.MaxValue, decimalValue));
如果十进制值在int范围之外,此解决方案将返回可能的最大或最小int值。你可能想用Math添加一些舍入。圆的,数学。天花板或数学。当值在int范围内时的下限。
其他回答
我更喜欢用数学。圆的,数学。地板上,数学。天花板或数学。截断以显式地设置适当的舍入模式。
注意,它们也都返回Decimal——因为Decimal的值范围比Int32大,所以您仍然需要强制转换(并检查溢出/下溢)。
checked {
int i = (int)Math.Floor(d);
}
四舍五入小数到最接近的整数
decimal a ;
int b = (int)(a + 0.5m);
当a = 49.9时,b = 50
当a = 49.5时,b = 50
当a = 49.4时,b = 49,以此类推。
decimal d = 2;
int i = (int) d;
这应该可以正常工作。
int i = (int)d;
会给你四舍五入的数字。
如果你想四舍五入到最接近的偶数(即>。5将围捕)你可以使用
int i = (int)Math.Round(d, MidpointRounding.ToEven);
一般来说,在c#中可以在所有数值类型之间进行强制转换。如果转换过程中没有丢失信息,可以隐式执行:
int i = 10;
decimal d = i;
尽管你仍然可以明确地这样做,如果你愿意:
int i = 10;
decimal d = (decimal)i;
然而,如果你要通过强制转换丢失信息,你必须明确地这样做(以表明你意识到你可能会丢失信息):
decimal d = 10.5M;
int i = (int)d;
这里你把"。5"丢掉了。这可能很好,但您必须明确它并进行明确的强制转换,以表明您知道您可能会丢失信息。
系统。Decimal实现了IConvertable接口,该接口有一个ToInt32()成员。
调用System.Decimal.ToInt32()工作吗?