###前提・実現したいこと
とある会計システムを作成している過程で想定する結果と違う値になっている箇所を複数発見しました。
調査した結果 floor を用いたときに引数が整数値のタイミングで不具合があるように見受けられました。
よって以下のソースを用いて確認してみました。
回避する方法は何かないでしょうか?
それとも環境による不具合でしょうか?
一応2種類の環境で試したところ同様の結果でした。
###該当のソースコード
PHP
1for ($i = (float) 0; $i < 10.0; $i+=0.1) { 2 var_dump([$i , floor($i)]); 3}
###発生している問題・エラーメッセージ
$i が整数値のときを抜粋。
array (size=2) 0 => float 0 1 => float 0 … array (size=2) 0 => float 1 1 => float 0 … array (size=2) 0 => float 2 1 => float 2 … array (size=2) 0 => float 3 1 => float 3 … array (size=2) 0 => float 4 1 => float 4 … array (size=2) 0 => float 5 1 => float 4 … array (size=2) 0 => float 6 1 => float 5 … array (size=2) 0 => float 7 1 => float 6 … array (size=2) 0 => float 8 1 => float 7 … array (size=2) 0 => float 9 1 => float 8 … array (size=2) 0 => float 10 1 => float 9
###補足情報(言語/FW/ツール等のバージョンなど)
手持ちの環境が以下しかありませんでした。
PHP Version 5.6.24
PHP Version 5.5.30
###BC Math 関数を用いた方法
とりあえず検証用で用意したソースはBC Math 関数を用いて解決しました。
PHP
1for ($i = (float) 0; $i < 10.0; $i = bcadd($i, 0.1, 1)) { 2 var_dump([$i, floor($i)]); 3}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/12 06:57