• 締切済み

PHP5における四捨五入について

PHP5でラウンド関数を使用しても境界値の5の値を切り捨ててしまい,四捨五入が上手くできません。 具体的には,以下の感じです。 $C = ROUND($B / $A,2) "C=282.25" $D = ROUND($C,1) "D=282.2" ※データ型は特に定義していません。 どのようにしたら四捨五入が上手くできるか教えて頂けないでしょうか。よろしくお願いします。

みんなの回答

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

細切れの回答ですみません。 紙の上で(手作業で)計算するとちょうど282.25になるはず(例えばB=28225, A=100)という場合は、原因は浮動小数点演算の丸め誤差ということになります。この場合、回答No.1の$Eの値が丸め誤差になります。 この場合、丸め誤差より大きく、実際の計算には影響しない程度に小さい値を四捨五入を行う前に加えてやれば問題は解消します。 例えば > $C = ROUND($B / $A,2) "C=282.25" > $D = ROUND($C,1) "D=282.2" のかわりに   $W = 0.000001   $C = ROUND($B / $A + $W,2)   $D = ROUND($C + $W,1) のようにするわけです。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

念のための確認です。 > $C = ROUND($B / $A,2) "C=282.25" > $D = ROUND($C,1) "D=282.2" このようになる状況で、   $E = $C - 282.25 とやると、$Eの値は何になりますか? ひょっとして負数になりませんか? というのも、"C=282.25"が実は282.249999....という値で、末尾が四捨五入されて282.25と表示されている可能性があるからです。 上記の式で$Eが負数になるようであれば、$Cは282.25より僅かに小さい値ですから、小数点以下第2位で四捨五入すると282.2となるのが正常ということになります。

関連するQ&A