2016-05-30 26 views
0

無論這是一個好還是壞的功能,任何能力的JavaScript程序員通常都知道JavaScript沒有定義一個或多個整數類型的可能變化精度的通常分工,並且在一個或多個浮點數類型定義了可能變化的精度。相反,數字的行爲就像一個沒有任何舍入錯誤或1 + 2!== 3的純整數類型,只要你在一定的相對較大的範圍內保持整數,但是如果你的算術選項具有非零值,整數值或結果(如1.23或1/2)。Django模型的字段類型是否具有任何類似於JavaScript的Numbers的字段?

是否有任何可用於Django的字段類型的行爲像JavaScript數字?如果它們不是內置的,但可以與某人的軟件包一起使用,那麼這個軟件包是什麼?

謝謝,

+0

你可以擴展你的意思是「行爲像」嗎?您是否正在專門討論如何在呈現給用戶時對其進行了格式化?如果是這樣,那可能僅僅是在數據庫/ Python級別使用浮點類型,然後通過模板級別的自定義過濾器傳遞它的問題。 –

+0

嗯,改變我的原始意圖背後的請求:無論內部表示可能,最終用戶的影響是什麼是一個整數是*顯示*作爲一個整數,並且大多數浮點值將*顯示爲浮動點,在算術不精確的情況下不加起來。我想如果一個標準的浮點數不能在一些小範圍內存儲像3這樣的整數,那麼對於某個epsilon值來說,測試幾乎等於一個整數對於政府工作就足夠了。 – JonathanHayward

回答

1

不,沒有。

Django的模型字段使用數據庫的本機類型將數據存儲在數據庫中。 「字段類型」的目的是告訴Django,「保存時請將其保存爲此類型。」他們還指定存儲的值應該如何映射回原生Python類型。因爲像Postgres這樣的數據庫沒有「魔術」數字存儲類型,並且由於Python沒有原生的「魔術」數字類型,所以使用Django字段類型是沒有意義的。代表了一種魔術類型。

相反,您只需選擇一個整數類型即可將數據存儲爲,並在讀取或寫入該字段時遵守它。

0

我認爲最直接的方式就是使用FloatField進行存儲和用於顯示的自定義模板過濾器。

Python浮點數有一個is_integer() method,可以很容易地判斷浮點數是否完全等於整數。你template filter會是這個樣子:

def intify(value): 
    return int(value) if value.is_integer() else value 

另一種選擇是寫一個custom model fieldFloatField繼承和值取決於具體的值轉換成任何一個Python intfloat。但是,由於有些情況下intfloat的行爲不同,我會小心的讓底層的Python類型改變。

相關問題