更改默认浮点数打印格式
我有一些列表和更复杂的结构,里面包含浮点数。当我打印这些浮点数时,看到它们有很多小数位,但其实我并不需要这么多小数位。
所以我想定义一个自定义的格式,比如只保留2位或3位小数,在打印浮点数的时候使用。
我需要使用浮点数,而不是Decimal类型。而且,我不能对浮点数进行截断或四舍五入。
有没有办法改变默认的打印方式呢?
9 个回答
6
>>> a = 0.1
>>> a
0.10000000000000001
>>> print a
0.1
>>> print "%0.3f" % a
0.100
>>>
根据Python文档,使用repr(a)
可以得到17位数字(你在交互式提示符下直接输入a
时就能看到),而str(a)
(在你打印时自动执行)则会四舍五入到12位。
编辑:最基本的解决方法...不过你需要使用自己的类,所以...嗯。
>>> class myfloat(float):
... def __str__(self):
... return "%0.3f" % self.real
>>> b = myfloat(0.1)
>>> print repr(b)
0.10000000000000001
>>> print b
0.100
>>>
8
这段话并没有回答关于浮点数嵌套在其他结构中的更一般性的问题,但如果你只是想在列表或者类似数组的嵌套列表中打印浮点数,可以考虑使用 numpy
这个库。
比如,
import numpy as np
np.set_printoptions(precision=3, suppress=False)
list_ = [[1.5398, 2.456, 3.0],
[-8.397, 2.69, -2.0]]
print(np.array(list_))
会得到
[[ 1.54 2.456 3. ]
[-8.397 2.69 -2. ]]
10
正如Ignacio所说,你不能随便修改C语言的类型。
不过,如果你真的很想这么做,并且对C语言有一些了解,你可以自己去修改Python解释器的源代码,然后重新编译成一个自定义的版本。我曾经修改过列表的一些标准行为,这个过程虽然有点麻烦,但还算可以。
我建议你找一个更好的解决办法,比如用"%0.2f"
这种格式来打印浮点数:
for item in mylist:
print '%0.2f' % item,
或者
print " ".join('%0.2f' % item for item in mylist)