可能重复:
为什么.NET使用银行家的舍入作为默认值?
这是一个示例代码
decimal num1=390, num2=60, result;
result=num1/num2; // here I get 6.5
result=Math.Round(result,0);
Run Code Online (Sandbox Code Playgroud)
结果的最终值应为7但是,我得到6.为什么这样的行为呢?
好的,我意识到现在是星期天的早,所以我希望我只是遗漏了一些明显的东西:
我有这个功能:
private decimal CashConversion(decimal amount, decimal ratio)
{
if (ratio == 1) return amount;
decimal convertedAmount = amount / ratio;
return Math.Round(convertedAmount, 2);
}
Run Code Online (Sandbox Code Playgroud)
当我这样称呼它时:
decimal tax = CashConversion(96.53, 15);
Run Code Online (Sandbox Code Playgroud)
“税”变量等于 6.43。但是,96.53/15 是 6.435333333333333。将其四舍五入到 2 个位置应返回 6.44。我在这里错过了什么吗?
我不应该得到负数,请看下面的截图:
见下图:

这是代码:
for (double i=8.0; i<=12;i=i+0.5)
{
double aa= (i - Convert.ToInt32(i)) ;
Console.WriteLine(" "+i+" "+aa);
}
Run Code Online (Sandbox Code Playgroud) 我期待圆形小数,0.1到0.4向下舍入和0.5到0.9向上尝试这些,但由于某种原因,如果值为4.5它舍入到4而不是5所有其他值工作正常.3.5 = 4.0,5.5 = 6.0但4.5 = 4.0预期5.0
Math.Round(value / 2)
Math.Round(Math.Round(value / 2),0, MidpointRounding.AwayFromZero)
Run Code Online (Sandbox Code Playgroud) 我必须错过.NET舍入的一些微妙之处.所以我看这个例子:
decimal num = 2.5M;
var result = Math.Round(num);
Run Code Online (Sandbox Code Playgroud)
为什么result = 2?(我本来应该预期3,因为它应该围绕)