- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 .NET 中,为什么 System.Math.Round(1.035, 2, MidpointRounding.AwayFromZero)
产生 1.03 而不是 1.04?我觉得我的问题的答案在 http://msdn.microsoft.com/en-us/library/ef48waz8.aspx 标有“来电者注意事项”的部分。 ,但我无法理解这个解释。
最佳答案
你的怀疑是完全正确的。带小数部分的数字在 .NET 中表示为文字时,默认为 doubles . double (如 float )是十进制值的近似值,而不是精确的十进制值。它是可以用 base-2(二进制)表示的最接近的值。在这种情况下,近似值在 1.035 的较小一侧几乎消失了。如果您使用显式 Decimal 编写它,它会按您预期的那样工作:
Console.WriteLine(Math.Round(1.035m, 2, MidpointRounding.AwayFromZero));
Console.ReadKey();
要理解为什么 double 和 float 以它们的方式工作,想象一下用十进制(或二进制,也有同样的问题)表示数字 1/3。你不能 - 它转换为 .3333333....,这意味着准确地表示它需要无限量的内存。
计算机使用近似值来解决这个问题。我会准确地解释如何,但我可能会弄错。你可以在这里阅读所有相关信息:http://en.wikipedia.org/wiki/IEEE_754-1985
关于c# - 为什么 System.MidpointRounding.AwayFromZero 在这种情况下不四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221205/
在C#中,MidpointRounding.ToEven和MidpointRounding.AwayFromZero这两种小数舍入策略在精度上有区别吗?我的意思是两者都确保在四舍五入的数字之间均匀分布
我遇到了一个相当烦人的问题。 假设我有小数 2.5,我希望它四舍五入。我的所有研究都告诉我: Math.Round(2.5, 0, MidpointRounding.AwayFromZero) 会给我
我正在做一个应用程序,我需要始终使用 MidpointRounding.AwayFromZero 对数字进行四舍五入,但每次进行四舍五入时,我都必须编写以下语句 Math.Round(xxx, ddd
我需要使用不同于默认“四舍五入”Mathf.Round() 的中点舍入规则。 Mathf.Round() 没有中点舍入参数,所以我使用 System.Math.Round()。 C# 有不同的中点舍入
我需要使用不同于默认“四舍五入”Mathf.Round() 的中点舍入规则。 Mathf.Round() 没有中点舍入参数,所以我使用 System.Math.Round()。 C# 有不同的中点舍入
这个问题在这里已经有了答案: Why does .NET use banker's rounding as default? (5 个答案) 关闭 9 年前。 以下适用: var rounded =
在 .NET 中,为什么 System.Math.Round(1.035, 2, MidpointRounding.AwayFromZero) 产生 1.03 而不是 1.04?我觉得我的问题的答案在
我想从 c# 中的这一行在 javascript 中获得相同的结果: round = Math.Round((17245.22 / 100), 2, MidpointRounding.AwayFrom
为什么这会导致 0 而不是 1? Math.Round(0.5, 0, MidpointRounding.AwayFromZero) 这是一个例子:http://ideone.com/ayMVO 最佳
我使用的是 Visual Studio Professional 2012。我创建了一个新的 C# ConsoleApplication,目标是 .NET Framework 4.5,代码如下:
在 .NET 中,为什么 System.Math.Round(27.2351, 2, MidpointRounding.AwayFromZero) 产生 27.24 而不是 27.23? 第三个数字是
我有一个 Math.Round 的错误,没有任何解释。当我做 Math.Round(81.725, 2, MidpointRounding.AwayFromZero) 结果是 81,72 但是当我用
我如何在 Delphi 中使用类似 Math.Round 和 MidpointRounding.AwayFromZero 的 c#? 等同于: double d = 2.125; Console.Wr
我是一名优秀的程序员,十分优秀!