DB中字段的數據類型爲FLOAT,值爲18.7。我想在18.70頁面上存儲並顯示它。每當我輸入額外0它仍然只存儲它作爲18.7MySQL FLOAT和小數點
如何存儲額外的0?我可以更改該字段的數據類型。
DB中字段的數據類型爲FLOAT,值爲18.7。我想在18.70頁面上存儲並顯示它。每當我輸入額外0它仍然只存儲它作爲18.7MySQL FLOAT和小數點
如何存儲額外的0?我可以更改該字段的數據類型。
在FLOAT
列,什麼MySQL
商店爲18.7
,居然是:
01000001 10010101 10011001 10011010
其中,從數據庫中檢索和轉換回你的顯示格式,是18.7
。
在現實中,所存儲的值是由十進制數18.70000076293945
,你可以通過發出該查詢看到表示的二進制分數:數的
CREATE TABLE t_f (value FLOAT);
INSERT
INTO t_f
VALUES (18.7);
SELECT CAST(value AS DECIMAL(30, 16))
FROM t_f;
IEEE-754
表示將它們存儲爲二進制小數,因此一個值等0.1
只能用連續分數表示,因此不準確。
DECIMAL
另一方面存儲十進制數字,將9
數字打包爲4
字節。
浮點類型不會在十進制數字之前的數字左側存儲無意義零的數量,也不會在十進制數字之後存儲數字的右側存儲無效零的數量。如果要存儲用戶輸入的確切數字字符串,並且能夠將12.7與12.70區分開來,則需要使用基於字符串的類型(或將精度存儲在單獨的字段中)。但是,您可以將您在應用程序中顯示兩位數的內容四捨五入。
如果需要使用兩個小數點:
decimal(n,2);其中n> = 2
十進制數據類型將保留小數點格式並提供比float和double數據類型更準確的結果。
您是否試圖將貨幣存儲爲浮動貨幣?如果是這樣,請使用小於2的小數位數。
您真的想在貨幣上進行定點運算。
這只是非常寬泛的經驗法則和我自己的觀察,但在數據庫中序列化的常規業務邏輯中,您幾乎從不需要浮點數。我知道有很多例外,但是當我在表格中看到一個浮點類型的列時,我很懷疑。我會對其他人發現的東西感興趣。