PHP

【PHP】暗黙的に小数点をround()しているnumber_format()

概要

number_format()で小数点を扱うと、常にround()を行っています。
round()に関するオプションもないので、厳密な数値を扱う場合は気を付けないと、
見ている箇所によって計算結果に誤差が出る可能性がありますね。
たまたまUser Contributed Notes見て知りましたが、これはマニュアルに明記してほしいですね。

フォーマット

桁数指定なし(整数のみ出力パターン)

<?php
$number_list = [
    0.0,
    0.1,
    0.2,
    0.3,
    0.4,
    // ↑ ここまで 0扱い
    // ↓ ここから 1扱い
    0.5, 
    0.6,
    0.7,
    0.8,
    0.9,
];

foreach ($number_list as $number) {
    echo $number . '->' . number_format($number) . PHP_EOL;
}

/*
出力結果:
0->0
0.1->0
0.2->0
0.3->0
0.4->0
0.5->1
0.6->1
0.7->1
0.8->1
0.9->1
*/

小数点第2桁まで出力のパターン

<?php
$number_list = [
    0.001,
    0.002,
    0.003,
    0.004,
    // ↑ ここまで 0.00扱い
    // ↓ ここから 0.01扱い
    0.005,
    0.006,
    0.007,
    0.008,
    0.009
];

foreach ($number_list as $number) {
    echo $number . '->' . number_format($number, 2, '.', ',') . PHP_EOL;
}

/*
出力結果:
0.001->0.00
0.002->0.00
0.003->0.00
0.004->0.00
0.005->0.01
0.006->0.01
0.007->0.01
0.008->0.01
0.009->0.01
*/

参考
number_format()
http://php.net/manual/ja/function.number-format.php#allnotes