JavaScriptのおける小数計算誤差対応のお話し

投稿日:

こんにちは。

今日は、JavaScriptでの小数計算誤差について書いておきます。
恐らく、この記事に辿りついた方は、
JavaScriptで小数点計算をした上で、
上手くいかない方がほとんどではないでしょうか。

なので、
まずは誤差対応方法を先に記載しておきます。

JavaScriptの小数点計算対応方法

Functionを作成し、丸め計算をします。
この場合は、少数4桁までの計算としています。

function round(value){
var few = '';
value = Math.round(value*10000) + '';
few = ('0000' + value.slice(-4)).slice(-4);
return value.slice(0,-4) + '.' + few
}

呼び出しは以下の方法で
var Num = 0.018;
Num = round(Num);

コードの解説

コードの解説をしますと、

1)var few = '';
は小数点以下を保持するための変数です。

2)value = Math.round(value*10000) + '';
は、小数を整数に変換し、文字列扱いにしています。
小数4桁までなので、10000を掛けています。

3)few = ('0000' + value.slice(-4)).slice(-4);
は小数点部分を保持しています。
動き的には、末尾の文字から4桁を切り出す処理です。

先頭のゼロは、0.0078と言うような場合の対応です。
2)で0.0078は78になりますが、
78を末尾から四桁の場合は、78しか取得されません。
この状態で、後述の4)をすると0.78となります。
それを防ぐためのゼロ埋めです。

4)return value.slice(0,-4) + '.' + few
は末尾4桁を除いた文字列を切り出し、
小数点を追加した上で、
少数点部分(few)を文字列連結している処理です。

ちなみに、前述の0.0078の場合は、
value.slice(0,-4)の文字列は空となりますが、
結果的に、

.0078
となり、JavaScriptが数字と判断し0.0078という扱いになります。

-JavaScript
-, , ,

Copyright© 株式会社Solution Hack , 2024 All Rights Reserved Powered by AFFINGER4.