Math.Round围绕着我

时间:2010-11-03 10:12:36

标签: c# .net

我理解.NET是否使用银行家的四舍五入为2.5到2。但是,这可能是怎样的:

decimal point;
point =51 * 70 / 100;    
Math.Round(point,0, MidPointRounding.AwayFromZero);
轮到35?

即使它是奇数,我怎样才能将所有.5的圆整数转换为整数?

2 个答案:

答案 0 :(得分:10)

您的代码段中的第二行已经为您提供了整数结果。

51,70,100属于int类型,因此选择了整数乘法和除法运算符。整数乘法或除法的结果总是再次为整数类型,并且在整数上使用/进行除法时可能会截断可能的小数位。

声明point = 51 * 70 / 100;等同于

int tmp = 51 * 70;         // result is 3570
tmp = tmp / 100;           // result is 35 (!!!)
point = (decimal)tmp;      // point is 35m;

解决方案是更改代码,使其使用decimal算术:

point = 51m * 70m / 100m;  // point is 35.7m

实际上,一个操作数的类型decimal就足够了。这可以通过使用后缀m(对于货币)或使用类型转换来实现。以下示例也将给出所需的结果:

point = (decimal)51 * 70 / 100;

答案 1 :(得分:9)

你正在进行整数除法。试试这个:

decimal point = 51m * 70m / 100m;