【JavaScript】小数点の計算誤差による謎の端数が発生するときの対処(簡易版)

【JavaScript】小数点の計算誤差による謎の端数が発生するときの対処(簡易版)

はじめに

コジマです。

小数点の計算により小数点の十三位くらいに謎の端数が発生することがあります。

例えば、消費税計算するときに小数点以下を繰り上げで表示したい場合、
上記の例だと1485が正解なのに、以下のように1486となってしまいます。

こういう事象に対処する方法を紹介したいと思います。

他の記事は最後に記載するライブラリを使うやり方だったり、
めっちゃ面倒な関数作ったりしていたので、もっと簡易的に実装したいなと思って模索した結果です。

一つご理解いただきたいのが、あくまで簡易的な対応であり、有効数字の桁数の大きい精密な計算では応用効かないかもしれません。

対処

必要な小数点の桁数だけずらしてから元に戻すことを考えます。
消費税の場合は%なので、計算した数を100倍して、小数点以下を切り落としてから100で割ります。
そうすることによって誤差で発生した端数を無視します。

最低でもこれで小数点第二位の粒度では対応できそうです。

さいごに

簡易的に小数点誤差に対応する方法を紹介しました。

正確にやるにはdecimal.jsなどのjsライブラリがあるらしいので
気になる方は調べてみてください。

誤差が発生する原因は、数値計算がIEEE 754に準拠しているからとのことですが、
まだその理解が咀嚼できていないので、引き続き勉強していくとします。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

システムエンジニアのつらい部分のあるあるなんかをエンタメにしたチャンネルを作りました。
チャンネルはこちら
つらい部分も楽しくなればと思っているのでよかったらチャンネル登録や高評価してくれたらうれしいです。

以上、コジマでした。


JavaScriptカテゴリの最新記事