gpt4 book ai didi

perl - 为什么 Perl 的 sprintf 不能正确舍入 float ?

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

我正在寻找 Perl 的内置函数使用的舍入约定 sprintf .

我以为它会进行正常的舍入(例如 Java's rounding mode convention 中的 ROUND_HALF_UP ),但进一步挖掘证明这是错误的:

> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 0.335
0.34
> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 1.335
1.33

最佳答案

您已经被浮点数不是十进制分数的精确表示这一事实所困扰。这是我得到的:

  DB<1> $a=0.335

DB<5> print sprintf("%.19f",$a)
0.3350000000000000200
DB<7> $b=1.335

DB<8> print sprintf("%.19f",$b)
1.3349999999999999645
DB<9>

由于 0.335 在内部表示为略大于 0.335,因此四舍五入为 0.34,而 1.335 略小于 1.335,因此四舍五入为 1.33。

关于perl - 为什么 Perl 的 sprintf 不能正确舍入 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1651671/

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