为什么Decimal.Divide(int,int)工作,但不工作(int/int)?

100 c# math int divide

如何将两个32位的int数除以(int/int)返回给我0,但如果我使用Decimal.Divide()我得到正确的答案?我绝不是ac#guy.

Kon*_*lph 202

int是整数类型; 除以两个整数执行整数除法,即小数部分被截断,因为它不能存储在结果类型中(也int!).Decimal相比之下,它有一个小部分.通过调用Decimal.Divide,您的int参数可以隐式转换为Decimals.

您可以int通过显式地将至少一个参数强制转换为浮点类型来强制对参数进行非整数除法,例如:

int a = 42;
int b = 23;
double result = (double)a / b;
Run Code Online (Sandbox Code Playgroud)

  • 正确而简洁. (3认同)
  • 很好的答案.我也试过Decimal.Divide(a,b)给出了相同的结果. (2认同)

And*_*ngs 6

在第一种情况下,您正在进行整数除法,因此结果被截断(小数部分被截断)并返回一个整数.

在第二种情况下,首先将int转换为小数,结果为小数.因此,它们不会被截断,您将获得正确的结果.


Fre*_*örk 5

以下行:

int a = 1, b = 2;
object result = a / b;
Run Code Online (Sandbox Code Playgroud)

...将使用整数运算来执行。Decimal.Divide另一方面,需要两个类型的参数Decimal,因此除法将对小数值而不是整数值执行。这相当于:

int a = 1, b = 2;
object result = (Decimal)a / (Decimal)b;
Run Code Online (Sandbox Code Playgroud)

要检查这一点,您可以在上述每个示例之后添加以下代码行:

Console.WriteLine(result.ToString());
Console.WriteLine(result.GetType().ToString());
Run Code Online (Sandbox Code Playgroud)

第一种情况的输出将是

0
System.Int32
Run Code Online (Sandbox Code Playgroud)

..在第二种情况下:

0,5
System.Decimal
Run Code Online (Sandbox Code Playgroud)