在之前的項目中,我注意到價格字段被存儲爲int,而不是float。這是通過將實際值乘以100來完成的,原因是爲了避免陷入浮點問題。我應該將字段PRICE作爲int還是作爲float存儲在數據庫中?
這是一個很好的做法,我應該遵循或是不必要的,只會使數據不透明?
在之前的項目中,我注意到價格字段被存儲爲int,而不是float。這是通過將實際值乘以100來完成的,原因是爲了避免陷入浮點問題。我應該將字段PRICE作爲int還是作爲float存儲在數據庫中?
這是一個很好的做法,我應該遵循或是不必要的,只會使數據不透明?
有趣的問題。
我實際上不會在mysql環境中選擇float。以前的數據類型精度太高,問題太多。
對我而言,選擇範圍是int
和decimal(18,4)
。
我已經看過現實世界中用於表示浮點值的整數示例。 JD Edwards數據表的內部都是這樣做的。數量通常被10000除。雖然我確信它在表格中的速度更快,更小,但這意味着如果我們想要對它們進行任何操作,特別是除法,我們總是必須將整數轉換爲小數。
從編程角度來看,我總是傾向於使用價格decimal
(或支持它的RDBMS中的money
)。
儘管它可以節省與浮動相關的問題,但將價格保存爲整數可能會導致問題,您最終會向客戶收取100倍的價格。它也可能會混淆其他程序員。
我已經看到這兩個解決方案在中型電子商務網站上成功使用,但是我的選擇是使用浮動。
我認爲Decimal
適合此用途。
如果您乘數過大,浮點錯誤可能會導致您的問題。一般來說,財務計算不應該在可能的情況下用浮點數來完成。
我已經決定保持簡單,只需要用十進制 – 2010-01-29 12:39:50