gpt4 book ai didi

c# - .NET Math.Round(,,MidpointRounding.AwayFromZero) 无法正常工作

转载 作者:太空狗 更新时间:2023-10-29 22:12:21 29 4
gpt4 key购买 nike

我使用的是 Visual Studio Professional 2012。我创建了一个新的 C# ConsoleApplication,目标是 .NET Framework 4.5,代码如下:

    static void Main(string[] args)
{
double x = 2.44445;
double y = Math.Round(x, 4, MidpointRounding.AwayFromZero);
Console.WriteLine(y);
Console.ReadKey();
}

预期结果应为 2.4445,但实际返回 2.4444。//和之前的框架版本一样的结果,我试了VCE2010。

我知道这种问题通常是由 double 据类型的存储方式引起的(即将有限小数转换为无限二进制小数)。但是我没想到只有5个十进制数字会发生这种情况,例如2.44445

我担心这种事情是否会发生在更短的小数位上。我还想学习一种更安全的 C# 舍入方法(使用远离零约定)。谢谢。

最佳答案

这确实是由于 float 的精度脆弱。 0.5 可以完美地存储在 IEEE float 中,但 0.45、0.445 等不能。例如,当您指定 2.44445 时存储的实际值是 11009049289107177/4503599627370496,即 2.44449999999999989519494647... 现在应该很明显为什么数字会按原样四舍五入。

如果您需要精确地存储小数,请考虑使用 decimal 类型。

关于c# - .NET Math.Round(<double>,<int>,MidpointRounding.AwayFromZero) 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14055611/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com