[Python的3.1]子類浮強制定點印刷精度在Python
我在this answer跟進:
class prettyfloat(float):
def __repr__(self):
return "%0.2f" % self
我知道我需要跟蹤我的浮動文字的(即用prettyfloat(3.0)
等代替3.0
等),那很好。
但是,每當我做任何計算,prettyfloat
對象被轉換爲float
。
解決它的最簡單方法是什麼?
編輯:
我需要正好兩個十進制數字;我需要在整個代碼中使用它,包括在哪裏打印一個包含float
值的字典。這使得任何格式化功能都很難使用。
我不能使用Decimal
全局設置,因爲我想要完全精確的計算(只打印2個小數點)。
@Glenn Maynard:我同意我不應該重寫__repr__
;如果有的話,它將只是__str__
。但由於以下幾點,這是一個有爭議的問題。
@Glenn Maynard和@singularity:我不會繼承子類float
,因爲我同意它看起來會非常醜陋。
我會停止嘗試變得聰明,只要打印一個函數就可以打印float
。雖然我很傷心,我不能在內建類float
中覆蓋__str__
。
謝謝!
格式很好的最簡單的方法可能是使用'decimal.Decimal'。那有什麼問題? – 2010-11-03 23:56:22
我還沒有看到像float這樣的核心類型的子類化是正確的。 – 2010-11-04 00:02:09
@ S.Lott我需要正好兩位十進制數字;我在整個代碼中都需要它,包括在哪裏打印一個包含浮點值的字典。 @Glenn梅納德我沒有太多的希望,無論是:(只是想也許有一個乾淨的方式,使其工作。 – max 2010-11-04 00:02:13