2010-03-01 59 views
1

DB中字段的數據類型爲FLOAT,值爲18.7。我想在18.70頁面上存儲並顯示它。每當我輸入額外0它仍然只存儲它作爲18.7MySQL FLOAT和小數點

如何存儲額外的0?我可以更改該字段的數據類型。

回答

5

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字節。

1

浮點類型不會在十進制數字之前的數字左側存儲無意義零的數量,也不會在十進制數字之後存儲數字的右側存儲無效零的數量。如果要存儲用戶輸入的確切數字字符串,並且能夠將12.7與12.70區分開來,則需要使用基於字符串的類型(或將精度存儲在單獨的字段中)。但是,您可以將您在應用程序中顯示兩位數的內容四捨五入。

0

如果需要使用兩個小數點:
decimal(n,2);其中n> = 2

十進制數據類型將保留小數點格式並提供比float和double數據類型更準確的結果。

0

您是否試圖將貨幣存儲爲浮動貨幣?如果是這樣,請使用小於2的小數位數。

您真的想在貨幣上進行定點運算。

這只是非常寬泛的經驗法則和我自己的觀察,但在數據庫中序列化的常規業務邏輯中,您幾乎從不需要浮點數。我知道有很多例外,但是當我在表格中看到一個浮點類型的列時,我很懷疑。我會對其他人發現的東西感興趣。