【发布时间】:2011-11-02 11:57:42
【问题描述】:
我在 MySQL 中创建了一个包含 float(2,2) 类型列的表,并将值 10 插入到表中,但我发现存储的值是 0.99。
这背后的原因是什么?如果我们在 MySQL 中使用 float(m, n) 类型的列,其中 'm' 和 'n' 是整数,那么在此列中存储值时应该注意什么?
【问题讨论】:
标签: mysql floating-point
我在 MySQL 中创建了一个包含 float(2,2) 类型列的表,并将值 10 插入到表中,但我发现存储的值是 0.99。
这背后的原因是什么?如果我们在 MySQL 中使用 float(m, n) 类型的列,其中 'm' 和 'n' 是整数,那么在此列中存储值时应该注意什么?
【问题讨论】:
标签: mysql floating-point
float(2,2) 表示“使用两位数,其中两位在小数点后使用”。
因此,您可以从 -0.99 变为 0.99。您不能在此列中插入 10,您需要在逗号前至少两位数(因此 float(4,2) 或 float(2,0))。
MySQL 允许使用非标准语法:FLOAT(M,D) 或 REAL(M,D) 或 DOUBLE 精度(M,D)。这里,“(M,D)”表示值可以用 up 存储 共 M 位,其中 D 位可能在小数点后 观点。例如,定义为 FLOAT(7,4) 的列看起来像 -999.9999 显示时。 MySQL 在存储值时执行舍入,因此如果将 999.00009 插入 FLOAT(7,4) 列,则近似值 结果是 999.0001。
【讨论】:
MySQL 允许使用非标准语法:FLOAT(M,D) 或 REAL(M,D) 或 DOUBLE PRECISION(M,D)。这里,“(M,D)”表示最多可以存储M位的值,其中D位可能在小数点后。 p>
【讨论】:
在 MySql 中,有 FLOAT(M,D) 这样的数据类型。其中 D 是 小数位数,M 是总位数(包括 小数)。对于 FLOAT 和 M 范围 1 到 65,小数精度可以达到 24 位。 如果语法是 FLOAT(2,2),那么只有两个小数位,实数没有位。所以你想加 10,你可以像 FLOAT(5,2) 一样使用。
【讨论】:
float(M,D) 记住这里 M=max。不。允许的位数(范围 1 到 65),D=no。小数点后的位数。 所以你可以改变它浮动(5,2)。所以 float(2,2) 不能满足你输入 no.10 的需要
【讨论】:
虽然上述答案是正确的,但不建议使用 float(2, 2),最好避免使用这种类型的声明。在 FLOAT(M,D) 中,(M,D) 表示值最多可以存储 M 位,其中 D 可以在小数点后。数字将被四舍五入或截断;这将带来更多的麻烦而不是好处。原因是浮点数被 CPU 处理为近似数字而不是精确值。如果需要 (M,D) 类型的声明,则应使用 DECIMAL(M,D) 数据类型。
这是来自https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html的引用
从 MySQL 8.0.17 开始,不推荐使用非标准 FLOAT(M,D) 和 DOUBLE(M,D) 语法,您应该期望在未来的 MySQL 版本中删除对它的支持。
【讨论】: