gpt4 book ai didi

c# - 四舍五入到 4 位精度有意外行为

转载 作者:太空宇宙 更新时间:2023-11-03 19:41:32 26 4
gpt4 key购买 nike

我正在四舍五入一个特定的 double 值并期望得到某个结果,但它没有通过。这让我很好奇是否存在缺陷或者我是否遗漏了底层逻辑中的某些内容。

请看下面的代码片段:

double value = 0.01075;
Console.WriteLine(Math.Round(value, 4, MidpointRounding.AwayFromZero));

生产

0.0107

使用 AwayFromZero 让我认为它应该达到 0.0108。我已经尝试了几个不同的示例(如下所示)并在除上面列出的示例之外的每个示例中都获得了预期的结果。帮助??!

double value = 0.010075;
Console.WriteLine(Math.Round(value, 5, MidpointRounding.AwayFromZero));
// 0.01008

value = 0.01075;
Console.WriteLine(Math.Round(value, 4, MidpointRounding.AwayFromZero));
// 0.0107

value = 0.010750000001;
Console.WriteLine(Math.Round(value, 4, MidpointRounding.AwayFromZero));
// 0.0108

value = 0.01065;
Console.WriteLine(Math.Round(value, 4, MidpointRounding.AwayFromZero));
// 0.0107

value = 0.01055;
Console.WriteLine(Math.Round(value, 4, MidpointRounding.AwayFromZero));
// 0.0106

value = 0.0175;
Console.WriteLine(Math.Round(value, 3, MidpointRounding.AwayFromZero));
// 0.018

value = 0.175;
Console.WriteLine(Math.Round(value, 2, MidpointRounding.AwayFromZero));
// 0.18

value = 0.75;
Console.WriteLine(Math.Round(value, 1, MidpointRounding.AwayFromZero));
// 0.8

注意:使用 Visual Studio Pro 2015 和 .Net 4.5.2

最佳答案

大多数十进制数不能完全表示为 float 。最接近 0.01075 的 double 值恰好是 0.0107499999999999991395771559155,至少根据 this calculator .这不是 0.01070.0108 之间的中点,因此中点舍入模式不起作用。

顺便说一下,这就是为什么您从不使用 float 来赚钱。

关于c# - 四舍五入到 4 位精度有意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615903/

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