損をしないレンタルサーバー徹底比較サイト

レンタルサーバー徹底比較サイト

損をしないお得で確かなレンタルサーバー情報をお届けします。

PHPでのfloor関数(浮動小数点)での丸め誤差にご注意を!

読了までの目安時間:約 2分

丸め誤差とは

小数点を扱うときに、切捨てや四捨五入によって微妙に出る誤差のことを「丸め誤差」と呼ぶ。

消費税計算などで起こりやすい事象。

 

あらかじめ、小数以下の扱いルールを明確にして、ルールにのっとって計算をすることで誤差は生じない。

 

浮動小数点による丸め誤差

今回確認した事象は、PHPでの丸め誤差。

 

金額:75.9円

数量:10個

小数ルール:小数以下切捨て

 

上記の場合、単純に計算すると金額は759円となる。

しかし、floor関数を使って計算すると、758円となり1円の誤差が生じる

 

2進数化してから計算

floor関数は計算する前に2進数化してから計算する仕様の様だ。(公式情報

それにより、10進数では75.9でも2進数になると75.89となり、微妙な誤差が生じてしまう。

 

結果として、75.89*10=758.9となり、小数手に以下を切り捨てると758円となる。

 

対処方法

floor関数を使うと誤差が生じてしまうため使えない。

対処としては固定少数化してから整数化(小数以下切捨て)することで対処可能。

 

$total = $price * $quantity;

$value = sprintf('%f', $total); //固定小数化

$value = intval($value) //整数化(小数以下切捨て)

 

小数以下のルールが異なる場合は、適宜読み替えて頂きたい。

 

 

 

 

 

タグ : 

ブログ

この記事に関連する記事一覧

TOPへ戻る