MySQL FLOAT和小数

ste*_*tef 1 mysql

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

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

Qua*_*noi 5

在一FLOAT列中,实际MySQL存储的18.7是:

01000001 10010101 10011001 10011010
Run Code Online (Sandbox Code Playgroud)

从数据库检索并转换回您的显示格式,是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;
Run Code Online (Sandbox Code Playgroud)

IEEE-754数字表示将它们存储为二进制分数,因此类似的值0.1只能用连续分数表示,因此不准确.

DECIMAL另一方面,存储十进制数字,将数字打包94字节.