當我使用DecimalField時,我在數據庫中的位置很少。不幸,我必須處理雙重和浮動數據作爲輸入 - 這是我的問題。Django自定義十進制字段 - 自動浮動到雙重轉換的最佳方式?
我想做殘酷的價值(小數點後第二位),而不是數學回合。我存儲的目標是幾乎超過計算值(如果我的價值49.0000032131它仍然不到50,所以我不會把它湊到一起)。但正如我所說 - 我想將它保存爲48.98在數據庫(2位小數) - 節省內存和足夠的表示。
我的第一個解決方案是使用自定義Django的領域,這樣的事情:
class DecimalFixedField(models.DecimalField):
def __init__(self, *args, **kwargs):
kwargs['value'] = "{0:.2f}".format(kwargs['value'])
# or ? self.value = "{0:.2f}".format(kwargs['value'])
super(DecimalFixedField, self).__init__(*args, **kwargs)
我當然應該硬編碼decimal_places = 2 kwargs或使用它的代碼並不值2,但是......對其餘什麼?你有提示,更好的主意嗎?
什麼是重要的 - 我不想在代碼中的許多地方寫「{0:.2f}」。格式(...)。我想在OOP方法中做到這一點,因爲我在許多模型中使用DecimalField ......並且使這種預處理看起來很不錯。任何想法如何正確實施?
我知道這一點,但作爲我說 - 我有8個模型使用DecimalField,並且...我想要在一個地方以優雅的方式做到這一點。不在每個新模型或代碼中可以將浮點值保存到DecimalField中的每個地方:) – Izzy
儘管此代碼可能回答此問題,但提供有關爲什麼和/或如何回答問題的其他上下文會顯着提高其長期價值。請[編輯]你的答案,添加一些解釋。 – CodeMouse92