1. ホーム
  2. php

[解決済み] PHP Printf As Float Precision

2022-01-31 22:12:31

質問

PHPの printf 関数を使用して、ユーザーのストレージ容量を出力しています。完全な式は次のようなものです。

echo printf("%.02f", ($size/(1024*1024))) . " GB";

ということを考えると $size == (10 * 1024 * 1024) と出力されるはずです。

10.00 GB

しかし、そうではありません。それは次のように印刷されます。 10.04 GB . さらに

echo printf("%.02f", 10)

の結果

10.04


えーっ!?浮動小数点に変換するために整数を与えると、10を10.00000009に変換してしまうのです。

これはどうすれば改善されるのでしょうか?もちろん、整数で出力するのが1つの解決策ですが、値が常に整数とは限りません。5.57GBの場合もあり、その場合はこのスクリプトの精度が非常に重要になります。


そして、うーん...。

echo printf("%d", 10)

の結果

102

何かが大きく間違っている。

どうすればいい?

ということで、どうやら printf は、エコーされることを意図していません。全くです。

のインスタンスを変更するだけです。 printf から sprintf はその問題を修正しました。


さらに、echoを削除し、コマンドを単に printf("%.02f", 10) は、実際に、印刷されます。 10.00 ただし、echoのようにprintfに文字列を追加することはできないので、注意が必要です。


私に言わせれば、PHPは予期せぬT_FUNCTIONか何かの構文エラーを投げるべきだったのですが、話はそれます。