No.513
【PHP】浮動小数点表記の固定【float】
静鵜表記と数値表記の狭間に…
PHPの浮動小数点表記は本当に使いづらい。
浮動小数点を使うと値によって数値表記だったり指数表記だったり、行ったり来たりしてしまうのだ。(他の言語もそうなのかは不明)
まあ、それでも普通に変数として扱うなら許容できるけど、保存するとかそういう断になると途端に問題を引き起こす厄介者と化す。
CSVに出力したときに指数表記になり、たまたまハイフンで explode する処理を景趣したため誤動作を引き起こした、なんてのはザラである。
例えば下記のハイフンで繋がれたふたつの数値をexplodeすろと
1.100000000E-10-2.200000000E-100
とうぜんこうなる。
1.100000000E
10
2.200000000E
100
数値を期待するところに突如 1.100000000E なんで文字列扱いのデータが登場してしまう。もうぐっちょんぐっちょんである。
というわけで、保存時の固定方法をメモ。
数値表現への固定
sprintf を使えばよい。
sprintf('%.16f', 数値);
.16 の部分は小数点下の桁数なので、必要とする精度まで落としてもいい。