谁能解释一下这是怎么回事:
#!/usr/bin/perl -w
my $amount = 74.32 * 100.00;
printf "Unformatted Amount:${amount}:\n";
printf " Formatted Amount:%.11d:\n", $amount;
输出这个:
$ ./test.pl
Unformatted Amount:7432:
Formatted Amount:00000007431:
目前我已经停止使用 printf 和 sprintf 因为我不信任它们。所以我这样做了:
#!/usr/bin/perl -w
my $amount = 74.32 * 100.00;
$formatted_amount = "00000000000" . $amount;
$formatted_amount = substr($formated_amount,length($formatted_amount)-11,11);
printf "Unformatted Amount:${amount}:\n";
printf " Formatted Amount:${formatted_amount}:\n";
这有效,但很好奇我为什么需要这样做。
我了解二进制数如何不能准确地表示所有以 10 为基数的数字,并阅读了此 Stack Overflow 条目:如何消除 Perl 舍入错误,但老实说,我没想到会看到这样一个看似简单的示例出现问题。
$amount 的值也是正确的。只是 printf 没有正确打印!
有任何想法吗?