python中是否有内置的自定义数字格式?

时间:2010-09-13 02:45:44

标签: python

在C#中,我可以做(#。####),在小数点后打印最多 4位有效数字。 1.2 - > 1.2 1.234 - > 1.234 1.23456789 - > 1.2345

Afaik,在python中,只有c风格的%.4f,如果需要,它总是会打印到最后用0填充的4个小数点。 我不想要那些0。

对于实现我需要的最简洁方法有什么建议吗?

一种可能的解决方案是首先打印它并自己修剪0结束,但希望找到更聪明的方法。

3 个答案:

答案 0 :(得分:4)

大数字的格式不同,但是,对于你提到的那些:

>>> for x in (1.2, 1.234, 1.23456789):
...   print '%.4g' % x
... 
1.2
1.234
1.235

这是@ Daniel的答案中提到的更现代{0:0g}.format方法的传统等价物(适用于所有版本的Python 2.whatever)(仅适用于Python 3.whatever和2.6或更高版本)。例如,如果您使用的是Google App Engine(目前仅支持Python 2.5),则需要使用% - 运算符方法进行格式化(不能使用2.6或更好的{{1}方法)。

答案 1 :(得分:3)

看起来您可以使用“g”format specifier作为.format()字符串函数(仅在python 2.6 +中可用):

>>> x = 1.2
>>> print "{0:0.4g}".format(x)
1.2
>>> x = 1.234565789
>>> print "{0:0.4g}".format(x)
1.235

这包括小数点前后的数字,这就是你得到1.235(舍入1.2345到4位数)的原因。如果你只想要右边的有效数字,你必须做一些有趣的事情,比如

>>> x = 1.23456789
>>> # length of the number before the decimal
>>> left_sigdigs = len(str(x).partition(".")[0])
>>> format_string = "{0:0." + str(4 + left_sigdigs) + "g}"
>>> print format_string.format(x)
1.2346

请注意,它仍然是圆形的,与您的示例不同。

答案 2 :(得分:0)

>>>x = 36.2215405525
>>>from decimal import Decimal
>>>print Decimal(str(x)).quantize(Decimal('0.0001'))
36.2215