ひとりごと

新しい記事:[1320]  古い記事:[1318] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2004/10/19 (火)

・ 浮動小数点演算の罠

ローンの計算を一覧表でやるのもなんか間抜けなので、ケータイで出来ないもんかいなーと思って PHP でコードをちょろっと書いてみました。が、電卓で計算してみると1円だけ違うところがあるんですね(笑)。

よくよく調べてみると、下記の計算が期待通りになっていないのでした。

% php -r 'echo floor(450000*16.72/100);'
75239
ここでの正解は 75240 です。結果が整数の場合には誤差は関係ないと思っていたのですが、考えが甘かったようです。

でもって面白いことに

% php -r 'echo 450000*16.72/100;'
54240
の場合は期待通り表示されます。でもって、
% php -r '$a=450000*16.72/100;echo $a;'
54240
に関しても期待通りですが、
% php -r '$a=450000*16.72/100;echo floor($a);'
75239
になると誤差がでます。うむむむ、期待通りに動くときがあるというのは echo で丸めが行われているからでしょうか?

PHPに numeric 型があると良かったのですが、そういうわけにもいかないみたいなので、とりあえず

% php -r 'echo floor(450000/100*16.72);'
75240
と順番を変えてお茶を濁すのでした。 ←何の解決にもなっていない(笑)

# とりあえず小さい桁で四捨五入してからfloor()すると試した範囲では期待通りに動くようです。
[つっこみ]

新しい記事:[1320]  古い記事:[1318] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)