WHatは、このようにpython decimal?
1.00-> '1'
1.20-> '1.2'
1.23-> '1.23'
1.234-> '1.23'
1.2345-> '1.23'
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'
ジャスティンの答えの最初の部分だけが正しいです。 .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'
トリックを行う関数は次のとおりです。
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()を使用)。私はあなたの選択を取ると思います。
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'