2010-03-01 252 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的小数位数。

您真的想在货币上进行定点运算。

这只是非常宽泛的经验法则和我自己的观察,但在数据库中序列化的常规业务逻辑中,您几乎从不需要浮点数。我知道有很多例外,但是当我在表格中看到一个浮点类型的列时,我很怀疑。我会对其他人发现的东西感兴趣。