1. ホーム
  2. パイソン

[解決済み】小数を科学的記数法で表示する

2022-04-11 07:45:02

質問

どのように表示すればよいですか?

Decimal('40800000000.0000000000') as '4.08E+10'?

これを試してみました。

>>> '%E' % Decimal('40800000000.00000000000000')
'4.080000E+10'

でも、0が余分についている。

解決方法は?

from decimal import Decimal

'%.2E' % Decimal('40800000000.00000000000000')

# returns '4.08E+10'

あなたの「40800000000.0000000000」の中には、他の桁と同じ意味を持つ、より多くの有効なゼロが存在します。そのため、どこで止めるかを明示する必要があるのです。

もし、すべての末尾のゼロを自動的に削除したい場合は、試してみてください。

def format_e(n):
    a = '%E' % n
    return a.split('E')[0].rstrip('0').rstrip('.') + 'E' + a.split('E')[1]

format_e(Decimal('40800000000.00000000000000'))
# '4.08E+10'

format_e(Decimal('40000000000.00000000000000'))
# '4E+10'

format_e(Decimal('40812300000.00000000000000'))
# '4.08123E+10'