web-dev-qa-db-ja.com

Python Decimals format

WHatは、このようにpython decimal?

1.00-> '1'
1.20-> '1.2'
1.23-> '1.23'
1.234-> '1.23'
1.2345-> '1.23'

62
juanefren

Python 2.6以降の場合、 format :を使用します。

'{0:.3g}'.format(num)

Python 2.5以前:

'%.3g'%(num)

説明:

{0}tells formatは、最初の引数(この場合はnum)を出力します。

コロン(:)の後のすべてがformat_specを指定します。

.3は精度を3に設定します。

gは、重要でないゼロを削除します。 http://en.wikipedia.org/wiki/Printf#fprintf を参照してください

例えば:

tests=[(1.00, '1'),
       (1.2, '1.2'),
       (1.23, '1.23'),
       (1.234, '1.23'),
       (1.2345, '1.23')]

for num, answer in tests:
    result = '{0:.3g}'.format(num)
    if result != answer:
        print('Error: {0} --> {1} != {2}'.format(num, result, answer))
        exit()
    else:
        print('{0} --> {1}'.format(num,result))

利回り

1.0 --> 1
1.2 --> 1.2
1.23 --> 1.23
1.234 --> 1.23
1.2345 --> 1.23

Python 3.6以降を使用すると、 f-strings を使用できます。

In [40]: num = 1.234; f'{num:.3g}'
Out[40]: '1.23'
102
unutbu

ジャスティンの答えの最初の部分だけが正しいです。 .3は精度ではなく、総桁数であるため、「%。3g」を使用してもすべてのケースで機能するわけではありません。 1000.123のような数値で試してみてください。

だから、私はジャスティンが示唆しているものを使用します:

>>> ('%.4f' % 12340.123456).rstrip('0').rstrip('.')
'12340.1235'
>>> ('%.4f' % -400).rstrip('0').rstrip('.')
'-400'
>>> ('%.4f' % 0).rstrip('0').rstrip('.')
'0'
>>> ('%.4f' % .1).rstrip('0').rstrip('.')
'0.1'
21
blackdaemon

トリックを行う関数は次のとおりです。

def myformat(x):
    return ('%.2f' % x).rstrip('0').rstrip('.')

次に例を示します。

>>> myformat(1.00)
'1'
>>> myformat(1.20)
'1.2'
>>> myformat(1.23)
'1.23'
>>> myformat(1.234)
'1.23'
>>> myformat(1.2345)
'1.23'

編集:

他の人の答えを見て実験してみると、gがすべてのストリッピングを行ってくれることがわかりました。そう、

'%.3g' % x

これも見事に機能し、他の人が提案しているものとは少し異なります( '{0:.3}'。format()を使用)。私はあなたの選択を取ると思います。

12
Justin Peel

Pythonの標準 文字列フォーマット方法 を使用するだけです:

>>> "{0:.2}".format(1.234232)
'1.2'
>>> "{0:.3}".format(1.234232)
'1.23'

2.6でPythonバージョンを使用している場合は、

>>> "%f" % 1.32423
'1.324230'
>>> "%.2f" % 1.32423
'1.32'
>>> "%d" % 1.32423
'1'
4
Esteban Küber