如何将小数转换为整型?


当前回答

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 d = 2;
int i = (int) d;

这应该可以正常工作。

我发现强制转换操作符不工作,如果你有一个盒装小数(即一个对象类型内的十进制值)。转换。ToInt32(作为对象的十进制)在这种情况下工作正常。

当从数据库中检索IDENTITY/ autoumber值时出现这种情况:

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开箱转换

将十进制转换为整数

decimal decimalValue=5.00;
int intValue=Convert.ToInt32(decimalValue);
decimal vIn = 0.0M;
int vOut = Convert.ToInt32(vIn);

这是一个非常方便的转换数据类型的网页,为那些其他人。 http://www.convertdatatypes.com/Convert-decimal-to-int-in-CSharp.html

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"丢掉了。这可能很好,但您必须明确它并进行明确的强制转换,以表明您知道您可能会丢失信息。