任何人都可以根据下面的示例向我解释 FLOAT 在 mySQL 中的工作原理吗?我知道 float 是近似值,但真的有这么大的区别吗?而且只有9位数字,所以不是溢出问题,不是吗?
mysql> create table t(f FLOAT(15,2), db DOUBLE);
mysql> insert into t(f,db) VALUES (512659663, 512659663);
mysql> select * from t;
+--------------+-----------+
| f | db |
+--------------+-----------+
| 512659648.00 | 512659663 |
+--------------+-----------+
(mysql Ver 14.14 Distrib 5.1.44, 适用于 Windows XP 上的 Win32 (ia32))
最佳答案
FLOAT
是一个 32
类型,顾名思义,它是 float 。值越高,绝对精度越低。
512659648
大到足以引入十位错误。
更新:
在 IEEE-754
中(这就是 FLOAT
的含义),数据存储在 32
位中:1
-位符号,8
-位二进制指数和23
-位有效数。
指数显示最接近 2
的最小幂(在您的情况下为 28
,或 268435456
)。
有效数是二进制小数。它可以存储从 1
到 2
的数字,精度可达 2^-23
。在您的情况下,它是 1.11101000111010010000110
,或者 ~ 1.9098060
(十进制表示法)。
该数字是指数和尾数的乘积。
鉴于所有这些,精度为 2 ^ (28 - 23) = 2 ^ 5 = 32
对于该顺序的数字(2^28
到 2^29
).
关于mysql - mysql中的float精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520620/