PHPで小数計算(BCMath 任意精度数学関数)

KIMG0615

PHPに限らず、OS内部的には2進数で計算される。そのため、例えば10進数の「0.1」は2進数では無限小数になってしまうので、表示するときに丸め誤差が発生してしまう。

すなわち、除算だけではなく、加減算(足し算と引き算)でもこの丸め誤差の問題は発生するというわけだ。

PHPでは「BCMath 任意精度数学関数」というものが用意されており、職場ではこれが推奨されているのでメモをつくっておくことにした。

なお、この「BCMath 任意精度数学関数」はインストールが必要な代物で、レンタルサーバなどでは実装されていないことが多いと思われる。

扱い方

「関数名(左オペランド, 右オペランド, 小数点以下の桁数)」という形となる。つまり、一つの関数で一対一の計算だけができる。(※オペランド

どうやら動きは切り捨てになる模様。各オペランドの指定は文字列で指定。(とはいえ、キャストされるのでむき身の数字でも大丈夫な模様。)

なお、第3引数の桁数を設定しないと、bcscale() 関数でグローバルに設定した桁数を使う。そこにも設定されていない場合は0を使用する。

種類

  • bcadd:加算(+)
  • bcdiv:除算(/)
  • bcmod:剰余(%)
  • bcmul:乗算(*)
  • bcsub:減算(-)

四則演算と剰余のほかにも種類があるが、私は使わないので興味のある方は「php.net」の「BC Math 関数」のページを参照のこと。

  • このエントリーをはてなブックマークに追加

水蕗をフォローする

コメントを残す