我想將3.50存儲到mysql表中。我有一個可以存儲的浮點數,但它存儲爲3.5,而不是3.50。我怎樣才能得到它的尾部零點?在mysql中存儲金額
回答
錢值不存儲爲浮動,使用十進制或數字類型:
Documentation for MySQL Numeric Types
編輯&澄清:
浮點值易受舍入誤差他們只有有限的精度所以,除非你不關心你只能得到9.99而不是10.00,你應該使用DECIMAL/NUMERIC,因爲它們是沒有這種問題的定點數。
它真的很重要,如果它存儲爲3.5,3.50甚至3.500?
真正重要的是它從數據庫中檢索後的顯示方式。
或者我在這裏錯過了什麼?
也不要使用浮點數,使用小數。浮動有各種各樣的舍入問題,並不是很大。
爲什麼要將「3.50」存儲到數據庫中?就數據庫而言,3.5 == 3.50 == 3.5000。
您的演示文稿和格式的數字/日期/等應在應用程序,而不是數據庫中完成。
如果使用DECIMAL或NUMERIC類型,可以將它們聲明爲例如DECIMAL(18,2),即使它們爲0,也會強制2位小數。根據期望的值有多大,可以更改第一個參數。
存儲值可以使用DECIMAL(10,2)場,然後你可以使用FORMAT功能:
SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1
這不是一般將錢存爲一個浮動一個好主意,因爲四捨五入計算中可能會發生錯誤。
請考慮使用DECIMAL(10,2)。
無論精度如何,甚至像0.1和0.2這樣的數字都不可能用二進制浮點表示。 http://en.wikipedia。組織/維基/ Floating_point – Ray 2014-12-21 21:56:35
二進制不能準確地表示只有有限位數的浮點數。這不是數據,以便muuch損失,但實際上轉換錯誤.. Here's the manual giving examples
你可以在瀏覽器中看到這個動作,看到自己在這個代碼片斷。
<script>
var floatSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
floatSum += 0.1;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*0.1; // 1
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + floatSum + " = " + (expectedSum==floatSum) + "<br />");
// --- using integers instead ---
// Assume the example above is adding £0.10 ten times to make £1.00
// With integers, we will use store money in pence (100 pence (also written 100p) in £1)
var intSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
intSum += 10;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*10; // 100
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + intSum + " = " + (expectedSum==intSum) + "<br />");
document.write("To display as £ instead of pence, we can divide by 100 (presentation only) : £" + intSum/100 + "<br />");
</script>
- 1. 在進入負值餘額前存在mysql餘額檢查金額
- 2. Decimal,Float,Double或Varchar在數據庫中存儲價格金額?
- 3. MySQL查詢集合中存在的最大金額
- 4. 將金額添加到不存在的現有金額
- 5. MySQL - 獲取產品金額
- 6. MySQL選擇最高金額
- 7. Mysql減去SUM(金額)DebitAccount從SUM(金額)CreditAccount如果DebitAccount == CreditAccount
- 8. 從mysql表中選擇最大金額
- 9. 在2行MySQL合併金額
- 10. Mysql的節目名稱,SUM(金額),其中金額小於210和SUM(金額)大於或等於210
- 11. shapeshift.io API:「缺少輸出金額或存款金額」
- 12. 在GUI中累計金額
- 13. 在MySQL中存儲「額外」用戶數據的最佳方法?
- 14. 總金額的更新金額
- 15. c輸入金額的最小金額
- 16. NetSuite發票金額支付金額
- 17. Sql Server MAX的金額(金額)
- 18. 存儲金額()導致數據庫VS運行
- 19. 在MySQL中存儲mongoid或在mongo中存儲MySQL記錄ID?
- 20. 按金額排序Mysql價值列表
- 21. MYSQL更新使用金額()導致
- 22. 條件而MySQL的使用金額()
- 23. Mysql查詢總和動態金額
- 24. mysql使用金額不同的查詢
- 25. JavaFX MySQL數據庫返回金額
- 26. php和mysql的計數金額
- 27. 存儲在MySQL
- 28. 減去資金金額在SQL
- 29. MySQL的:在一列中選擇多列,總金額
- 30. Activerecord額外金額列
我確實提到了四捨五入問題。我的觀點是他不應該擔心它是如何存儲的,而是如何顯示的。您不會將財務信息存儲到小數點後兩位 - 匯率爲5,我們存儲爲6,但只顯示爲2. – 2014-09-04 07:51:14
(刪除以前無關的評論)。舍入爲好點+1。 – 2014-09-04 18:36:23