mysql - mysql中的float精度问题

标签 mysql types floating-point double

任何人都可以根据下面的示例向我解释 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)。

有效数是二进制小数。它可以存储从 12 的数字,精度可达 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/

相关文章:

javascript - 使用浮点源均匀分布整数

c - 使用 lex 检测 float

php - 处理来自多个选择字段的数据

mysql - 有没有办法在 MySQL 中影响用户定义的数据类型?

c++ - 将 double 舍入到最接近的 uint64_t

typescript :输入对象具有接口(interface)键的子集

javascript - 可以在这个特定的功能上下文中强制执行类型吗?

MySQL 查询具有最近日期的行

MySQL : Select all row of table depends on foreign key?

php - 搜索逻辑可高效访问 6 个以上相关表