如何在C#中将十进制转换为整数?

266

我该如何将十进制转换为整数?


13
请问您是想将数据四舍五入至最接近的整数,还是直接舍去小数部分(例如:总是向下取整)?知道这一点会更有帮助。 - Dinah
13个回答

2

似乎没有回答如何处理OverflowException/UnderflowException,这是由于尝试将超出int范围的十进制数转换而引起的。

int intValue = (int)Math.Max(int.MinValue, Math.Min(int.MaxValue, decimalValue));

如果十进制值超出int范围,此解决方案将返回最大或最小的int值。如果值在int范围内,则可能需要使用Math.Round、Math.Ceiling或Math.Floor进行四舍五入。


1

将十进制转换为整数

decimal decimalValue=5.00;
int intValue=Convert.ToInt32(decimalValue);

1
我发现如果你有一个装箱的十进制数(即一个对象类型中的十进制值),强制转换运算符不起作用。在这种情况下,Convert.ToInt32(decimal as object) 可以正常工作。
当从数据库检索IDENTITY/AUTONUMBER值时,就会出现这种情况:
SqlCommand foo = new SqlCommand("INSERT INTO...; SELECT SCOPE_IDENTITY()", conn);
int ID = Convert.ToInt32(foo.ExecuteScalar());  // works
int ID = (int)foo.ExecuteScalar();              // throws InvalidCastException

请参见4.3.2 拆箱转换


2
为了参考,再加一些内容:这是因为你只能将其解包到相同的原始类型。在这里,SELECT SCOPE_IDENTITY()返回numeric(38, 0),它被.NET翻译为decimalfoo.ExecuteScalar()返回一个作为object装箱的decimal,不能直接转换为int(int)(decimal)foo.ExecuteScalar()Convert.ToInt32(foo.ExecuteScalar())可以工作。 - rageit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接