Python 打印不带十进制字和浮点转换的十进制数字
我执行了一个简单的正常化过程:Python 打印不带十进制字和浮点转换的十进制数字,python,python-2.7,decimal,Python,Python 2.7,Decimal,我执行了一个简单的正常化过程: a = range(5) norm = [Decimal(i)/sum(a) for i in a] print norm 输出: [Decimal('0'), Decimal('0.1'), Decimal('0.2'), Decimal('0.3'), Decimal('0.4')] 但我只想把它打印出来: [0, 0.1, 0.2, 0.3, 0.4] 我如何纠正这一点?请帮忙 PS:这只是我试过的一个样本。我的实际数据有巨大的浮点数。我想这样做是为了
a = range(5)
norm = [Decimal(i)/sum(a) for i in a]
print norm
输出:
[Decimal('0'), Decimal('0.1'), Decimal('0.2'), Decimal('0.3'), Decimal('0.4')]
但我只想把它打印出来:
[0, 0.1, 0.2, 0.3, 0.4]
我如何纠正这一点?请帮忙
PS:这只是我试过的一个样本。我的实际数据有巨大的浮点数。我想这样做是为了避免浮点错误。我希望结果是小数,而不是浮点数 使用打印(str(十进制))代替打印(十进制):
要在不显示“Decimal”的情况下打印小数,您可以将Decimal子类化并覆盖
\uuuu repr\uuu
:
>>> class MyDecimal(Decimal):
... def __repr__(self):
... return str(float(self))
...
>>> x = Decimal(4.1)
>>> x
Decimal('4.0999999999999996447286321199499070644378662109375')
>>> y = MyDecimal(5.3)
>>> y
5.3
但是,当您对它们执行任何操作时,repr
将返回其原始形式:
>>> y = MyDecimal(5.3)
>>> z = MyDecimal(4.2)
>>> y + z
Decimal('9.500000000000000000000000000')
在这种情况下,要始终获取MyDecimal
,您需要覆盖Decimal
的所有操作,以返回MyDecimal
对象,而不是Decimal
请注意,我们在这里看到的是十进制的表示形式。在进行其他操作时,您需要保持这种状态。或在其他地方使用时始终转换为浮点:
在算术运算中,十进制对象通常不能与浮点组合:例如,尝试将十进制添加到浮点会引发TypeError。这个规则有一个例外:可以使用Python的比较运算符来比较浮点实例x和十进制实例y。除此之外,十进制和浮点实例之间的比较将遵循参考手册表达式部分中描述的比较不同类型对象的一般规则,从而导致混淆结果
>>> y = MyDecimal(5.3)
>>> z = MyDecimal(4.2)
>>> y + z
Decimal('9.500000000000000000000000000')