Math.Round围绕着我

Meh*_*SAR 2 .net c#

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

decimal point;
point =51 * 70 / 100;    
Math.Round(point,0, MidPointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)

轮到35?

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

Dir*_*mar 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;
Run Code Online (Sandbox Code Playgroud)

解决方案是更改您的代码,以便它使用decimal算术:

point = 51m * 70m / 100m;  // point is 35.7m
Run Code Online (Sandbox Code Playgroud)

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

point = (decimal)51 * 70 / 100;
Run Code Online (Sandbox Code Playgroud)

  • @Peter van Kekem:51,70,100是`int`类型,因此选择整数乘法和除法运算符.整数乘法或除法的结果总是再次为整数类型,并且在整数上使用"/"进行除法时可能会截断可能的小数位. (2认同)

Dar*_*rov 9

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

decimal point = 51m * 70m / 100m;
Run Code Online (Sandbox Code Playgroud)