Blog

プログラミングで小数の計算がちょっとおかしいところ

2019.04.09Cat:Blog プログラム 開発

小数の計算は実は簡単とは言えません。
これはコンピューターの計算が10進数ではなくて、2進数のわけです。

10進数→2進数

例 0.1 を2進数にすると

(1) 0.1 x 2 = 0.2 整数は 0 → 0.0
(2) 0.2 x 2 = 0.4 整数は 0 → 0.00
(3) 0.4 x 2 = 0.8 整数は 0 → 0.000
(4) 0.8 x 2 = 1.6 整数は 1 → 0.0001
(5) 0.6 x 2 = 0.2 整数は 1 → 0.00011
(6) 0.2 x 2 = 0.4 整数は 0 → 0.000110
(7) 0.4 x 2 = 0.8 整数は 0 → 0.0001100
(8) 0.8 x 2 = 1.6 整数は 1 → 0.00011001
(9) 0.6 x 2 = 1.2 整数は 1 → 0.000110011

結果は0.000110011…と無限循環小数になる

計算誤差が起きる

0.2 + 0.4 = 0.6000000000000001

どうすればいいか

使う言語によって、ライブラリがあるはずです。

金額周りに関する精度が大事なので、
できれば、整数で計算にましょう。

ちなみに、自分の対応方法は下記です。
(1) 小数点桁数を決める。この小数と10の桁数乗をかける
(2) 一度小数になったら、精度が失うので、小数点以下は捨てて、整数とする
(3) 計算
(4) 結果は10の桁数乗を割る(この時も精度が失うが)

Author Profile

ShuTzuyu
台湾出身のシュウです。 大学は情報管理と国際企業を専攻、2015年卒業後、来日。 アニメとデザインが好きです。
» 投稿一覧
     
  • Launch Cart越境ECカート

Archive

ページTOPへ