Python中有内置的自定义数字格式吗?
在C#中,我可以用格式 (#.####) 来输出小数,这样可以显示小数点后最多4位有效数字。
比如:
1.2 会显示为 1.2
1.234 会显示为 1.234
1.23456789 会显示为 1.2345
据我所知,在Python中,只有C风格的 %.4f,这种方式总是会输出4位小数,如果需要的话,后面会补0。
但我不想要那些0。
有没有什么建议,可以让我以最简单的方式实现我想要的效果?
一个可能的解决办法是先打印出来,然后自己去掉末尾的0,但我希望能找到更聪明的方法。
3 个回答
0
>>>x = 36.2215405525
>>>from decimal import Decimal
>>>print Decimal(str(x)).quantize(Decimal('0.0001'))
36.2215
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
4
大数字的格式会有所不同,但对于你提到的那些情况:
>>> for x in (1.2, 1.234, 1.23456789):
... print '%.4g' % x
...
1.2
1.234
1.235
这是传统的写法(在所有版本的Python 2.whatever中都能用),相当于@Daniel的回答中提到的更现代的{0:0g}.format
方法(这个方法只适用于Python 3.whatever和2.6及以上版本)。举个例子,如果你在使用Google App Engine(目前只支持Python 2.5),你就需要用%
运算符来格式化(不能使用2.6及以上的.format
方法)。
3
看起来你可以在 .format()
字符串函数中使用 "g" 格式说明符(这个功能在 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 四舍五入到四位数字)。如果你只想要小数点右边的有效数字,你可能需要做一些特别的处理,比如:
>>> 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
注意,这个方法还是会进行四舍五入,不像你之前的例子。