1. ホーム
  2. python

[解決済み] 浮動小数点数を丸めずに文字列に変換する方法

2023-04-20 10:45:58

質問

説明するまでもない理由で、len()でカウントするためにfloatを文字列に変換する必要があるプログラムを作っています。しかし、str(float(x))では文字列に変換する際にxが丸められ、全体が狂ってしまいます。どなたか修正方法をご存じないでしょうか? 知りたい方は使用されているコードをどうぞ。

len(str(float(x)/3))

どのように解決するのですか?

浮動小数点数を扱う場合、ある種の丸めは避けられないことがよくあります。 これは、10の基数で正確に表現できる数が、常に2の基数(コンピュータが使用する)で正確に表現できるとは限らないからです。

たとえば

>>> .1
0.10000000000000001

この場合、.1が文字列に変換されるのは repr :

>>> repr(.1)
'0.10000000000000001'

Pythonはこの問題を回避するためにstr()を使うときに最後の数桁を切り落とすと思いますが、それは部分的な回避策であり、何が起こっているのかを理解するための代用にはなりません。

>>> str(.1)
'0.1'

四捨五入がどのような問題を引き起こしているのか、正確にはわかりません。 おそらく、出力をより正確に制御する方法として、文字列の書式設定を行う方がよいのではないでしょうか?

>>> '%.5f' % .1
'0.10000'
>>> '%.5f' % .12345678
'0.12346'

ドキュメントはこちら .