浮動小数点Tweetこんちは。最近もJavaScriptばっかり書いています。JavaScriptで計算を行う時、気を付けなければいけないのが小数点を含んだ数値の計算です。小数点を含んだ数値で計算を行うと、思わぬ所で予想外の値に出会うことになります。以下の様な仕様があったとします。昨日の体重から今日の体重を引いて、体重の増減量を表示させる。増減量の小数点第2位以下は切り捨てて表示。これを単純に実装すると以下のようになります。"kgやせました!");そして実行結果です。今日は0kgやせました!ファッ!?0.1kg痩せたはずが、0kgと表示されてしまいました。100gとはいえ、こんな表示になったらガックリきますね。ズレてしまっています。754という規格に従って実装されているためです。この計算結果はJavaScriptの仕様なのでJavaScript的には正しい値であり、避けようがありません。754と小数計算の誤差についての関係は下記のURLの解説が分かりやすくオススメです。http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtmlこれの対処法として、小数値に10^Nの数値をかけて整数値にしてから計算してしまおう!といった対処法を見かけることもありますが、厳密にはこれも間違いです。6690.000000000001上記のように、小数を整数値に変換しようとした時点で計算結果がズレてしまうことがあるので、正確な値が出せるとは言えません。計算すると正確に出せたりします。)というわけで前置きが長くなってしまいましたが、小数の減算・乗算を正確に計算するfunctionを作ってみました。value2から小数点を取り除き、整数値のみで乗算を行う。OKMath.subtract()で減算、Math.multiply()で乗算を行います。整数値に変換する際に10のN乗を掛けるのではなく、数値文字列からドットを取り除くようにしています。これで小数点計算は誤差なく出来るようになったんじゃないかと思います。正確なテストを行ったわけではないのでどこかに見落としがあるかもしれませんが、この記事で小数が原因のバグに出会う人が少しでも少なくなれば幸いです。非エンジニアにもオススメ。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。