C# 仅通过将类型从int更改为decimal,同一数值在数学结果中的差异如何

C# 仅通过将类型从int更改为decimal,同一数值在数学结果中的差异如何,c#,integer,decimal,C#,Integer,Decimal,我在做一个项目,需要做一些数学题: decimal X = (Value / 881) * (item.Type ? 130: 130 * 2); 例如,参数“值”等于3000 如果“值”的类型为int,则结果为390。。 如果“值”的类型为decimal,则结果为442.67 这怎么可能 因为十进制值。如果你一步一步地计算你的公式,你就会明白这种差异是由于当你使用decimal作为一种类型时,小数点后面的值造成的 将3000(整数)除以881时: 将3000(十进制数)除以881: 我希望

我在做一个项目,需要做一些数学题:

decimal X = (Value / 881) * (item.Type ? 130: 130 * 2);
例如,参数“值”等于3000

如果“值”的类型为
int
,则结果为390。。 如果“值”的类型为
decimal
,则结果为442.67

这怎么可能


因为十进制值。如果你一步一步地计算你的公式,你就会明白这种差异是由于当你使用
decimal
作为一种类型时,小数点后面的值造成的

将3000(整数)除以881时:

将3000(十进制数)除以881:


我希望.net fiddle能让您更好地了解我的答案

Value
类型为
int
时,您有整数除法:
Value/881
3000/881==3
;当
Value
decimal
时,则
3000m/881==3.405…m
int
执行的运算越不精确(例如,产生余数的除法),结果的累积误差就越大。
int Value = 3000
//Output is 3. Output is in integer
decimal X = (Value / 881);  //When int is divided by int then result is in int
decimal Value = 3000
//Output is 3.4052213393870601589103291714. Output is in decimal.
decimal X = (Value / 881);  //When decimal is divided by int then result is in decimal