gpt4 book ai didi

Perl for 循环失控

转载 作者:行者123 更新时间:2023-12-04 16:17:36 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Does scientific notation affect Perl's precision?

(1 个回答)



Perl int function and padding zeros

(2 个回答)


8年前关闭。




我在 Perl 中有一个简单的 for 循环

for ($i=0; $i <= 360; $i += 0.01)
{
print "$i ";
}

为什么当我运行此代码时会得到以下输出,一旦达到 0.81,它就会突然开始添加更多小数位?我知道我可以简单地四舍五入来避免这个问题,但我想知道它为什么会发生。 0.01 的增量似乎一点也不疯狂。
 0.77
0.78
0.79
0.8
0.81
0.820000000000001
0.830000000000001
0.840000000000001
0.850000000000001
0.860000000000001
0.870000000000001

最佳答案

计算机使用二进制表示。并非所有十进制浮点数都以二进制表示法精确表示,因此可能会出现一些错误(实际上是舍入差异)。这也是同样的原因why you shouldn't use floating point numbers for monetary values :

messed up recepit

(图片取自 dailywtf)

解决这个问题的最优雅的方法是使用整数进行计算,将它们除以正确的小数位数并使用 sprintf限制打印的小数位数。这将确保:

  • 总是有更正的结果打印
  • 舍入误差不累积

  • 试试这个代码:
    #!/usr/bin/perl
    for ($i=0; $i <= 360*100; $i += 1) {
    printf "%.2f \n", $i/100;
    }

    关于Perl for 循环失控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741009/

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