the*_*dev 1 c# math rounding .net-4.0
可能重复:
在C#中:Math.Round(2.5)结果为2(而不是3)!你在跟我开玩笑吗?
.Net Round Bug
我有一个中间值(number.5),我需要指定如何舍入(上限值或下限值).
我理解的行为Math.Round与MidPointRounding参数,但不解决我的问题:
// To Even
Console.WriteLine(Math.Round(4.4)); // 4
Console.WriteLine(Math.Round(4.5)); // 4
Console.WriteLine(Math.Round(4.6)); // 5
Console.WriteLine(Math.Round(5.5)); // 6
// AwayFromZero
Console.WriteLine(Math.Round(4.4)); // 4
Console.WriteLine(Math.Round(4.5)); // 5
Console.WriteLine(Math.Round(4.6)); // 5
Console.WriteLine(Math.Round(5.5)); // 6
// in one case I need
Console.WriteLine(Math.Round(4.4)); // 4
Console.WriteLine(Math.Round(4.5)); // 4
Console.WriteLine(Math.Round(4.6)); // 5
Console.WriteLine(Math.Round(5.5)); // 5
// another case I need
Console.WriteLine(Math.Round(4.4)); // 4
Console.WriteLine(Math.Round(4.5)); // 5
Console.WriteLine(Math.Round(4.6)); // 5
Console.WriteLine(Math.Round(5.5)); // 6
Run Code Online (Sandbox Code Playgroud)
你有一个重载Math.Round,从中获取枚举值MidpointRounding.
这有两个选择:
看起来你想要的是TowardsZero或TowardsNegativeInfinity的不存在的MidpointRounding值.唯一的选择是自己编写舍入代码.
也许这样的事情:(未经过测试,可能与inf/nan等处理不好)
double RoundTowardNegInfinity(double val)
{
var frac = val - Math.Truncate(val);
if (frac == 0.5 || frac == -0.5)
{
return Math.Floor(val);
}
return Math.Round(val);
}
double RoundTowardZero(double val)
{
var frac = val - Math.Truncate(val);
if (frac == 0.5 || frac == -0.5)
{
return Math.Truncate(val);
}
return Math.Round(val);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5344 次 |
| 最近记录: |