2010-09-13
Python で小数をパーセント表示にしたい
学習メモです。
lst = [0.01, 0.201, 0.1575, 0.025, 0.322, 0.65]
を
['1%', '20.1%', '15.75%', '2.5%', '32.2%', '65%']
としたい。
最初に試したのは
リストを定義して、内包表記でリストの各要素を100倍
>>> lst = [0.01, 0.201, 0.1575, 0.025, 0.322, 0.65] >>> print [x*100 for x in lst] [1.0, 20.100000000000001, 15.75, 2.5, 32.200000000000003, 65.0]
うわぁぁぁあ
浮動小数点型
そもそも演算前から…
>>> lst = [0.01, 0.201, 0.1575, 0.025, 0.322, 0.65]
>>> print lst
[0.01, 0.20100000000000001, 0.1575, 0.025000000000000001, 0.32200000000000001, 0.65000000000000002]
orz
>>> type(lst[1])
<type 'float'>
float は浮動小数点型。んで、この浮動小数点数は2進数の分数として表現されているそうで、0.201 なんかは無限小数になっちゃうんですって。
decimal モジュール
10進数を正確に表現できるそうです。
>>> from decimal import Decimal >>> lst = [0.01, 0.201, 0.1575, 0.025, 0.322, 0.65] >>> print [Decimal(str(x)) for x in lst] [Decimal('0.01'), Decimal('0.201'), Decimal('0.1575'), Decimal('0.025'), Decimal('0.322'), Decimal('0.65')]
str() よりも repr() の方がいいのかな?? もうちょっと調べなくっちゃ。
ただ、Decimal でも10進数の無限小数となる場合は誤差が生じるそうです。要注意。
結果
文字列フォーマット操作なんかも使って
>>> from decimal import Decimal >>> lst = [0.01, 0.201, 0.1575, 0.025, 0.322, 0.65] >>> print ['%g%%' % y for y in [Decimal(str(x))*Decimal('100') for x in lst]] ['1%', '20.1%', '15.75%', '2.5%', '32.2%', '65%']
できたー
参考
トラックバック - http://d.hatena.ne.jp/ino46/20100913/1284389938
リンク元
- 15 http://www.google.co.jp/url?sa=t&rct=j&q=python パーセント エスケープ&source=web&cd=4&ved=0CDcQFjAD&url=http://d.hatena.ne.jp/ino46/20100913/1284389938&ei=QEK3TvKuH-2emQ
- 12 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=python+パーセント文字
- 9 http://www.google.co.jp/url?sa=t&rct=j&q=python 小数 表示&source=web&cd=4&sqi=2&ved=0CDMQFjAD&url=http://d.hatena.ne.jp/ino46/20100913/1284389938&ei=1cayTvHZI-HOmAWKgZnkAw&usg=AFQjCNF_yBCwDRGmz1CrXrAtuK2VvGOBZQ
- 9 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/ino46/20100913/1284389938&rct=j&q=python パーセント エスケープ&ei=J9m8TdKaH42wuA
- 8 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1331087350951&ved=0CC4QFjAB&url=http://d.hatena.ne.jp/ino46/20100913/1284389938&ei=9MdWT6POE8-emQXFw5DkCQ&usg=AFQjCNF_yBCwDRGmz1CrXrAtuK2VvGOBZQ&sig2=SQKAcz2RlQLOsT0GYF_Rng
- 6 http://www.google.co.jp/search?q=python+パーセント 計算&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&hl=ja&client=firefox
- 6 http://www.google.co.jp/search?q=python+小数点+表示&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 6 http://www.google.co.jp/url?sa=t&rct=j&q=python 浮動小数点 表示&source=web&cd=4&ved=0CD0QFjAD&url=http://d.hatena.ne.jp/ino46/20100913/1284389938&ei=2d7MTsCwCemNmQWw1vS3DQ&usg=AFQjCNF_yBCwDR
- 5 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=python+小数点 表示&aq=f&aqi=&aql=&oq=&gs_rfai=
- 5 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADFA_jaJP379JP379&q=python+パーセント