Python小数格式

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' 这里有一个函数可以实

像这样格式化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'

这里有一个函数可以实现这一点:

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'