質問: 丸め誤差の解決方法が知りたいです。 csvファイルから0.1を10万個読み込んで、その読み込んだ0.1を10万回足したのですが、すると100000.0000013329 という結果になりました。 丸め誤差が原因であるのはわかるのですが、 いつ2進数や10進数に変換されているのかわからず、 どこでどう直せばいいのかわかりません。 どう直せばよいのでしょうか?
回答: * CSVから読み込んだ時点=文字列=【10進法で表現した文字列】 * float型に変換=【メモリ上の2進法表現】 * print関数で出力する=【10進法表現に変換して出力】 です。2進法に変換した時点で問題の誤差が発生しますので、float型に変換することがあってはいけません。 そこで、Decimalクラスのドキュメントにも書いてあることですが、 ``` Decimal('3.14') ``` と文字列から直接変換すべしとなっているわけです。