【PHP】小数点が切り上げられない

round 関数を使って、小数点以下第一位で四捨五入していたプログラムが、Xserver にアップして動かしたところ、何故か四捨五入されず、長々と小数点以下の数字が出力されるというバグが発生しました。


round(1765670 / 10000, 1)
期待する出力 176.5
実際の出力 176.5670000000000072759576141834259033203125

最初は Laravel の影響かと思いましたが、特に原因が見つからず。
どうやら json_encode 後に上記現象が発生するらしいことを特定。

引数を渡すことで解決可能か?と思い公式ドキュメントを調べてみたところ・・・
引数に指定する定数に関するコメント欄にて、同現象に合った人のコメントを発見!

https://www.php.net/manual/ja/json.constants.php#123167

php.ini の設定を以下に変えることで解消できました。

serialize_precision = -1

php.ini の serialize_precision のデフォルト値は「-1」なのですが、Xserver では何故か「100」になってました。
どおりでローカル環境では正常に動作したのに、Xserver に上げた途端にバグが発生したわけだ。。。

round()、ceil()、floor() 辺りの関数で同現象にあっている場合、同様に php.ini の設定を変えることで解消できるかもしれません。