以下是示例代码
decimal num1=390, num2=60, result;
result=num1/num2; // here I get 6.5
result=Math.Round(result,0);
结果的最终值应 7 但是,我 6 。为什么会出现这种行为?
答案 0 :(得分:6)
检查第三个参数MidpointRounding。
默认情况下使用MidpointRounding.ToEven,所以
Math.Round(result,0); // 6.0
//or
Math.Round(result,0, MidpointRounding.ToEven); // 6.0
//But:
Math.Round(result,0, MidpointRounding.AwayFromZero); // 7.0
答案 1 :(得分:2)
来自MSDN:
如果d的分数分量是 在两个整数之间,一个 哪个是偶数,另一个是奇数, 偶数返回。
答案 2 :(得分:2)
这种舍入有时被称为四舍五入到最近,或者是银行家的四舍五入。它最大限度地减少了在单一方向上始终舍入中点值所导致的舍入误差。
http://msdn.microsoft.com/en-us/library/3s2d3xkk.aspx
示例:
// 11.1 --> 11
// 11.2 --> 11
// 11.3 --> 11
// 11.4 --> 11
// 11.5 --> 11
// 11.6 --> 12
答案 3 :(得分:1)
decimal.Math.Round使用MidpointRounding.ToEven作为默认值。
意思是如果一个数字是奇数,则将其更改为偶数。否则,它保持不变。此行为遵循IEEE标准754第4节。有时称为舍入到最近,或者是银行家的舍入。它最大限度地减少了在单一方向上始终舍入中点值所导致的舍入误差。
答案 4 :(得分:1)
这一定与
的原因相同 Math.Round(6.5, 0);
类似地产生6而不是7.这一切都归结为MSDN文档link text举例说明
Console.WriteLine(Math.Round(3.45, 1)); //Returns 3.4.
Console.WriteLine(Math.Round(4.35, 1)); // Returns 4.4
another MDSN Doc中的是状态
整数最近参数d。如果d的小数分量在两个整数之间,其中一个是偶数而另一个是奇数,则返回偶数。请注意,此方法返回Decimal而不是整数类型。
答案 5 :(得分:1)
使用Math.Ceiling方法()。
十进制num1 = 390,num2 = 60,结果;
结果= Math.Ceiling(NUM1 / NUM2);