[Python 3.1]
我正在跟进this answer:
class prettyfloat(float):
def __repr__(self):
return "%0.2f" % self
我知道我需要跟踪我的浮点字面值(例如,将3.0
替换为prettyfloat(3.0)
,等等),这很好。在
但是每当我做任何计算时,prettyfloat
对象被转换成{
最简单的方法是什么?在
编辑:
我只需要两个十进制数字;我需要它贯穿整个代码,包括在哪里打印一个包含float
值的字典。这使得任何格式化函数都很难使用。在
我不能使用Decimal
全局设置,因为我希望计算是完全精确的(只打印两个小数点)。在
@Glenn Maynard:我同意我不应该重写__repr__
;如果有什么,那就是__str__
。但这是一个没有实际意义的观点,因为下面这一点。在
@Glenn Maynard和@singularity:I'll not subclass float
,因为我同意它最终看起来会很难看。在
我不想再耍聪明了,只要在打印float
的地方调用一个函数。虽然我很遗憾我不能重写内置类中的__str__
,但是我很遗憾。在
谢谢你!在
我看了你的回答,我认为你混淆了数据及其表示。在
@Robert Rossney建议将
^{1}$float
子类化,这样你就可以map()一个标准的、非掺假的floats
组成prettyfloats
以供显示之用:你不应该在任何地方用cd4{1}代替你的代码。在
当然,从
^{pr2}$float
继承来解决这个问题是一种过度杀戮,因为这是一个表示问题,而不是数据问题。一个简单的函数就足够了:现在,如果这与表示无关,而您实际想要实现的是代码中每个地方的定点计算都限制在两个小数位,那就是another story。在
使用
^{1}$decimal
。这就是它的目的。在…除非您真的想在代码中的任何地方都使用全精度浮点值,但将它们四舍五入到小数点后两位。在这种情况下,您需要重写打印逻辑。在
因为
prettyfloat (op) prettyfloat
不返回prettyfloat
示例:
^{1}$如果您不想将每个操作结果手动强制转换为
prettyfloat
,并且仍然希望使用prettyfloat
的话,解决方案是重写所有运算符。在带有运算符
^{pr2}$__add__
(这很难看)的示例通过这样做,我认为您还必须将名称从
prettyfloat
更改为uglyfloat
:),希望这将有所帮助相关问题 更多 >
编程相关推荐