1

誰でもこれがどのように説明できますか:

#!/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 が正しく印刷されていないだけです。

何か案は?

4

1 に答える 1