Python小数格式
像这样格式化python十进制的好方法是什么 1.00-->“1”Python小数格式,python,decimal,Python,Decimal,像这样格式化python十进制的好方法是什么 1.00-->“1” 1.20-->“1.2” 1.23-->“1.23” 1.234-->“1.23” 1.2345-->'1.23'只需使用Python的标准: 如果您使用的是2.6下的Python版本,请使用 >>> "%f" % 1.32423 '1.324230' >>> "%.2f" % 1.32423 '1.32' >>> "%d" % 1.32423 '1' 这里有一个函数可以实
1.20-->“1.2”
1.23-->“1.23”
1.234-->“1.23”
1.2345-->'1.23'只需使用Python的标准: 如果您使用的是2.6下的Python版本,请使用
>>> "%f" % 1.32423
'1.324230'
>>> "%.2f" % 1.32423
'1.32'
>>> "%d" % 1.32423
'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 2.6或更高版本,请使用: 对于Python 2.5或更早版本:
'%.3g'%(num)
说明:
{0}
告诉format
打印第一个参数——在本例中为num
冒号(:)后面的所有内容都指定格式\u spec
.3
将精度设置为3
g
删除不重要的零。看见
例如:
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或更新版本,您可以使用:
贾斯汀回答的第一部分是正确的。 使用“%.3g”并不适用于所有情况,因为.3不是精度,而是总位数。试一下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'
美好的比我的要干净得多。当你得到0.0000005这样的值时,尽管我相信“%.3g”%x会开始给你指数?这不是一个通用的解决方案,对尾随零的数字不起作用。如果你使用的是十进制而不是浮点,你可能还想看看
{0:g}
没有从小数中切掉不重要的零。这似乎导致Python2.7使用科学的表示法来表示更大的数字:>>>“{0:3g}”。format(100.20)'100'>>“{0:3g}”。format(1001.20)'1e+03',那么如何设置无指数表示法
。作为{:,2f}.format(number)
剂量,但也移除不重要的剂量zeros@unutbu-知道如何让“{0:.3g}”为Python fStrings工作吗?@ScottSkiles:num=1.2345;f'{num:.3g}'
返回'1.23'
。看看这个解释吧。太棒了!这个答案值得编辑吗?我在某处找到了这个。
1.0 --> 1
1.2 --> 1.2
1.23 --> 1.23
1.234 --> 1.23
1.2345 --> 1.23
In [40]: num = 1.234; f'{num:.3g}'
Out[40]: '1.23'
>>> ('%.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'