MySQL FLOAT&小数点

时间:2010-03-01 17:06:44

标签: mysql

DB中字段的数据类型为FLOAT,值为18.7。我想在18.70上存储并显示在页面上。每当我输入额外的0时,它仍然只存储为18.7

如何存储额外的0?我可以更改该字段的数据类型。

4 个答案:

答案 0 :(得分:5)

FLOAT列中,MySQL的{​​{1}}商店实际上是:

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个字节。

答案 1 :(得分:1)

浮点类型不会在十进制数字前面的数字左侧或十进制数字后面的数字的右侧存储无效零的数量。如果要存储用户输入的精确数字字符串并且能够将12.7与12.70区分开来,则需要使用基于字符串的类型(或将精度存储在单独的字段中)。但是,您可以在应用程序中以两位数字显示的内容。

答案 2 :(得分:0)

如果需要使用两个小数点:
小数(N,2);其中n> = 2

十进制数据类型将保持小数点格式,并提供比浮点数和双数据类型更准确的结果。

答案 3 :(得分:0)

您是否试图将货币存储为浮动货币?如果是这样,请使用小于2的十进制数字的小数。

你真的想要对货币进行定点算术。

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