PHPのround関数はPHP5.3.0で一新されましたが、その挙動は複雑です。以前の記事「PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった」では典型的な挙動を紹介しましたが、実際はもう少し細かい場合分けがあります。僕自身の整理も兼ねて、RFC*1およびPHPのCソースコードと対応づけながら何回かに分けて紹介していきます。 まずは、第2引数(精度)が大きすぎまたは小さすぎる場合の処理を紹介します。例えば次のコードを考えてみましょう。 <?php ini_set("precision",20); var_dump(round(5.3e-25,24)); //float(9.999999999999999237E-25) var_dump(1e-24); //float(9.999999999999999237E-25) 0.0000…ときて小数点以下第25位が5