PHPMEMO0004

printfで小数を表示するとき、整数部も小数部もゼロ埋めにしたい。

例えば「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」になったぞ。 しかしなんだこれは。もっとエレガントなやり方はないものか…。

最終更新:2012年03月09日 08:43