【问题标题】:Difference between float(2,2) and float() in mysqlmysql中float(2,2)和float()的区别
【发布时间】:2011-11-02 11:57:42
【问题描述】:

我在 MySQL 中创建了一个包含 float(2,2) 类型列的表,并将值 10 插入到表中,但我发现存储的值是 0.99。

这背后的原因是什么?如果我们在 MySQL 中使用 float(m, n) 类型的列,其中 'm' 和 'n' 是整数,那么在此列中存储值时应该注意什么?

【问题讨论】:

    标签: mysql floating-point


    【解决方案1】:

    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。

    【讨论】:

      【解决方案2】:

      MySQL 允许使用非标准语法:FLOAT(M,D) 或 REAL(M,D) 或 DOUBLE PRECISION(M,D)。这里,“(M,D)”表示最多可以存储M位的值,其中D位可能在小数点后。 p>

      【讨论】:

      • @Francis:欢迎来到 stackoverflow!您的答案是正确的,如果您在“回答实际问题”、“解释一般原则”、“解释在文档中的何处找到它”和“链接到文档”之间找到了正确的组合,您可能会得到更多为你的答案点赞。
      【解决方案3】:

      在 MySql 中,有 FLOAT(M,D) 这样的数据类型。其中 D 是 小数位数,M 是总位数(包括 小数)。对于 FLOAT 和 M 范围 1 到 65,小数精度可以达到 24 位。 如果语法是 FLOAT(2,2),那么只有两个小数位,实数没有位。所以你想加 10,你可以像 FLOAT(5,2) 一样使用。

      【讨论】:

        【解决方案4】:

        float(M,D) 记住这里 M=max。不。允许的位数(范围 1 到 65),D=no。小数点后的位数。 所以你可以改变它浮动(5,2)。所以 float(2,2) 不能满足你输入 no.10 的需要

        【讨论】:

          【解决方案5】:

          虽然上述答案是正确的,但不建议使用 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 版本中删除对它的支持。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-09-18
            • 1970-01-01
            • 2014-08-17
            • 2011-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多