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的小数位数。
您真的想在货币上进行定点运算。
这只是非常宽泛的经验法则和我自己的观察,但在数据库中序列化的常规业务逻辑中,您几乎从不需要浮点数。我知道有很多例外,但是当我在表格中看到一个浮点类型的列时,我很怀疑。我会对其他人发现的东西感兴趣。