如果我打印列表中包含的浮动列表没有问题,但如果我只打印此列表列表中的一个浮点数,则不会打印所有数字!
listafeaturevector = [
[0.26912666717306399, 0.012738398606387012, 0.011347858467581035, 0.1896938013442868, 2.444553429782046]
,
[0.36793086934925351, 0.034364344308391102, 0.019054536791551006, 0.0076875387476751395, 3.03091214703604]
,
[0.36793086934925351, 0.034364344308391102, 0.019054536791551006, 0.0076875387476751395, 3.03091214703604]
,
[0.30406240228443038, 0.047100329090555518, 0.0049653458889261448, 0.0004618404341300081, 5.987025009738751]
]
for i in range (0,len(listafeaturevector)):
a = listafeaturevector[i]
print(a[0])
print(",")
print(a)
for j in range (0, len(a) ):
print(a[j])
打印所有数字:
print(a)
这会打印部分数字:
print(a[0])
答案 0 :(得分:4)
这是因为,floats
通过调用__str__
方法转换为字符串。这将截断数字。
如果您不是确切的表示,则应该通过内置__repr__
调用repr
方法来获取整个浮动表示
另一个重要因素是浮点数的精度高于IEEE 64位可表示格式。所以会有一些截断
例如
>>> print 0.26912666717306399
0.269126667173
>>> print repr(0.26912666717306399)
0.269126667173064
>>> print("%.16f" % 0.26912666717306399)
0.2691266671730640
>>>
答案 1 :(得分:2)
您可以指定小数点后所需的位数:
print("%.15f" % a[j])
答案 2 :(得分:1)
原因是,当您print
list
时,它会调用列表的__str__
方法,而后者会调用每个方法的__repr__
方法。项目。引用docs
对象.__再版__(个体) 由repr()内置函数和字符串转换(反向引号)调用,以计算对象的“官方”字符串表示形式。如果可能的话,这应该看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象(给定适当的环境)。
所以__repr__
应该尽可能地接近对象。所以:
>>> repr(0.012738398606387012)
'0.012738398606387012'
>>> str(0.012738398606387012)
'0.0127383986064'
list
作为模范公民,他试图让所有项目看起来都很有意义。这就是为什么你的号码不会被截断的原因。
使用这个简单的测试类,我们可以观察到相同的行为:
class B():
def __str__(self): return 'STR CALLED'
def __repr__(self): return 'REPR CALLED'
>>> print(B())
STR CALLED
>>> print([B()])
[REPR CALLED]
答案 3 :(得分:0)
尝试使用字符串格式:
print(".%15f" % a[0])