2009/12/04

[JavaScript]浮動小数点数の演算

JavaScriptでたまーに計算する時にバグが発生する時があります。

サンプルをちょっと作ってみました。

var decimal = 101.1;
var int = 50;
var result = 101.1 - int;
alert(result); //51.0999999999999・・・4と表示される

先ほど、バグと書きましたが、実はこれ本当はバグではなく、こういう仕様なんです。

2進数で計算しているので、その際に、誤差が発生してしまうのです。

仮に上の計算結果を正しく求めたい場合は、下のように実装すれば取得することができます。
var decimal = 101.1;
var int = 50;
var result = (decimal*10 - int*10)/10;

ちなみに、JavaScriptは、JavaScript、お前もか(小数点を含む計算について)を参考にすると、IEEE 754を採用しているみたいです。

まー何はともわれ、浮動小数点数が絡んでくる計算の場合には注意したいですね。

他の参考:質問:数値の掛け算の不具合について

0 コメント:

コメントを投稿