誰でもこれがどのように説明できますか:
#!/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";
これは機能しますが、なぜこれを行う必要があるのか について興味があります。
2 進数がすべての基数 10 の数値を正確に表すことができないことを理解しており、このスタック オーバーフロー エントリ: Perl の丸めエラーをなくす方法 を読みましたが、正直なところ、このような一見単純な例で問題が発生するとは思っていませんでした。
$amount の値も正しいです。printf が正しく印刷されていないだけです。
何か案は?