哪種類型(浮點或小數)最適合用於在mysql數據庫中存儲價格?浮點或小數的價格?
回答
浮點數不準確,可能引入累積舍入誤差。十進制是必須精確的財務信息的最佳格式。
十進制也不準確 - 但它不是精確的我們期待的方式。 – 2010-09-22 11:49:11
如果Michael的評論的含義不明確,請參閱下面的答案。 – MaxVT 2010-09-24 16:11:23
對於金融計算使用十進制
根據IEEE 754浮動總是二進制,只有新標準IEEE 754R定義十進制格式。許多分數二進制部分永遠不能等於精確的十進制表示。任何二進制數可以寫成m/2^n(m,n正整數),任何十進制數作爲m /(2^n * 5^n)。由於二進制數缺乏主要因子5,所有二進制數都可以用小數精確表示,但反之亦然。
0.3 = 3/(2^1 * 5^1) = 0.3
0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125]
1/4 1/8 1/16 1/32
因此,對於金融計算使用十進制不浮動
請使用BigDecimal的,因爲它是最好的價格,因爲便士正確四捨五入到元。
Joshua Bloch建議BigDecimal。
你是否在某處看到「java」標籤? – 2010-09-22 11:47:26
@邁克爾你讓我! 。我用來尋找由java過濾新問題,所以我得到了這個問題。 – 2010-09-22 11:57:58
當我們存儲一個浮點數時,我們不保存確切的數字,這是一個近似值。整數部分獲得優先級,小數部分與類型大小相近。所以如果你有計算,並需要準確的結果使用十進制。
價格是十進制值,並在其上計算,預計表現得像小數,當談到四捨五入,文字等
這正是小數類型做。
花車存儲爲二進制分數,他們做而不是行爲像十進制分數 - 他們的行爲往往不是人們習慣於十進制數學期望。詳細解釋請參閱The Floating-Point Guide。
對於貨幣值,永遠不要使用二進制浮點類型 - 尤其是當您有完美的十進制類型時!
- 1. 浮點格式的小數點
- 2. Magento的價格在小數,但僅售價.00或價格0.99
- 3. 浮點數,小數或整數
- 4. 浮點等價?
- 5. 格式化小數點後不打印零點的浮點數
- 6. SQL:浮點數到小時格式
- 7. 聲明浮點數或浮點數嗎?
- 8. 浮點格式化爲3或4位小數
- 9. Rails 3 GPS座標的浮點數或小數點
- 10. 小數位數浮點數
- 11. 格式浮點數最小和最大小數位數
- 12. 將小數位數多的浮點數轉換爲浮點數只有一個小數位的浮點數
- 13. 價格字段的字符串,十進制或浮點數據類型?
- 14. 格式浮點數
- 15. 浮點數格式
- 16. Python:列表或浮點數組或浮點數
- 17. 如何格式化小數點(浮點)數網址
- 18. 將浮點數格式化爲小數點後兩位
- 19. Objective c格式浮點數,逗號和小數點後兩位
- 20. 格式浮點數到小數點後n位
- 21. Android的 - 如何正確地解析字符串漂浮(價格數字格式:整數,小數或兩者)
- 22. 帶浮點數的格式
- 23. 的Javascript格式浮點數
- 24. 的Javascript - 價格和浮動
- 25. Javascript格式浮點數的小數位數
- 26. 具有相同重要小數位數的格式浮點數
- 27. Magento平價運費價格不含小數點
- 28. 精確到浮點小數?
- 29. 自定義小數點浮點數
- 30. 從浮點數中提取小數點
哪個數據庫?有些像甲骨文只有十進制 – Mark 2010-09-22 11:28:53
請參閱[使用浮點數或小數的會計應用美元金額?](http://stackoverflow.com/questions/61872/use-float-or-decimal-for-accounting-application-dollar-amount 「堆棧溢出」)。 – Andrew 2010-09-22 11:32:36
這是一個MySQL數據庫,但如果其他人之間有差異,我喜歡聽它。 – tom 2010-09-22 11:36:05