PHPの少数演算

PHPの少数演算

PHPの少数演算において、割と有名な話。

PHPマニュアルにも書いてあるとおり
http://jp2.php.net/manual/ja/language.types.float.php

PHPの浮動小数に以下のような挙動があります。

答えは実行してもらえばわかりますが、7になります。本来であれば8になってほしいところですが、なぜこうなってしまうのでしょうか。

これは丸め誤差によるものです。

PHPに限った話ではないですが、コンピュータの内部では、数値をすべて2進数で扱いますが、10進数であれば正確な数で表せる数でも、2進数では正確に表せない数があります。

正確に表せない数はある程度の桁数で値を省略することになり、誤差が生じます。これを丸め誤差といいます。

サンプルで使用している「0.1」「0.7」は2進数で正確に表せない数の例であり、丸め誤差により$numの値は「7.999999999999…」となってしまい、予想外の結果になってしまいます。

では、上記のような問題が生じた場合どのような対処をすればよいのでしょうか?

BC Math 関数を利用する

PHPには任意精度計算用の関数が用意されています。
# bcmathは別途有効にする必要があります。
http://jp.php.net/manual/ja/ref.bc.php

文字列に変換

文字列に変換するという方法があります。

PHPカテゴリの最新記事