c# - .NET 4 中的 Math.Round() 行为

标签 c# math .net-4.0 rounding

<分区>

Possible Duplicates:
In C#: Math.Round(2.5) result is 2 (instead of 3)! Are you kidding me?
.Net Round Bug

我有一个中间值 (number.5),我需要指定如何对其进行舍入(上限值或下限值。)

我了解带有 MidPointRounding 参数的 Math.Round 的行为,但这并不能解决我的问题:

// 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

最佳答案

Math.Round 有一个重载,它从 MidpointRounding 中获取枚举值。

这有两个选项:

  • ToEven(默认) 也称为银行四舍五入。将四舍五入到最近的一对。所以 2.5 变成 2,而 3.5 变成 4。
  • AwayFromZero:始终将 X.5 取整为 X+1;例如,2.5 变为 3。

关于c# - .NET 4 中的 Math.Round() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5165297/

相关文章:

Python 和 Powers 数学

c# - 如何开始使用 C# 4.0 和 .NET 4.0?

c# - 如何使[示例]扩展方法更加通用/实用/高效?

c# - 如何修复,无法加载文件或程序集 'XXX' 或其依赖项之一。无法验证强名称签名

c# - 快速替换Win32_NetworkAdapter WMI类以获取本地计算机的MAC地址

c# - NHibernate MySQL 枚举

c - 高效计算 2 的幂

c# - 更改引用参数内的引用

Javas Math.sin() 始终产生 NaN

javascript - 使用 Selenium 测试由 javascript 生成的 html