例えば「12.34」を「000012.340000」って表示したい場合、
printf("%06.6f", 12.34);
ってやればいいかと思うけど、これをやっても
12.340000
としか表示されない。
printf("%06d", 12.34);
だと
000012
と表示される。 うう。なんでだ。
まあ、こんな需要は普通ないから実装されていないんだろうな。 代替措置として次のものを考えた。
$num = 12.34; $iPart = (int)$num; $dPart = $num - $iPart; printf("%06d%.6f", $iPart, $dPart);
これは、小数値をintでキャストすると小数点以下が切り捨てられる仕様を利用している。 しかし、「0000120.340000」と表示されてしまう。%.6fとやると 「0.340000」になるからだ。 ぐぬぬ。
じゃあこれならどうだ!
$num = 12.34; $iPart = (int)$num; $count = 6 - strlen($iPart); $zeros = str_repeat("0", $count); printf("%s%.6f", $zeros, $num);
おお、今度は「000012.560000」になったぞ。 しかしなんだこれは。もっとエレガントなやり方はないものか…。