こんにちは。
今日は、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という扱いになります。