【问题标题】:Decimal datatype is rounding the values十进制数据类型正在四舍五入值
【发布时间】:2012-11-10 04:30:49
【问题描述】:

我已将我的MySQL 字段表数据类型设置为decimal,因为根据我所阅读的内容,我可以在decimal 数据类型字段中使用逗号/点存储价格...问题是每当我用逗号或点存储任何数据时,MySQL 都会自动向上或向下舍入。例如。当我执行以下查询时:

UPDATE table SET field = 114.21 WHERE id = 1;

然后设置字段,但值被舍入到 114,而不是显示我在查询中设置的数据 (114.21) - 有什么解决方案吗?还是我应该只使用其他数据类型?

【问题讨论】:

  • 您是否将值绑定为参数?

标签: mysql decimal sqldatatypes


【解决方案1】:

在我还有一个关于在小数点上使用什么的问题之前。但是通过使用 DOUBLE(10,2) 作为我的 DATATYPE 解决了问题,并且当您保存它时它会在数据库中显示确切的数字。希望它会有所帮助。

【讨论】:

    【解决方案2】:

    正如 Mihai 提到的,您需要为小数类型定义适当的精度,例如DECIMAL(10,2) 两位小数。

    当插入一个十进制值时,mySQL 将四舍五入。

    来自文档:

    对于 DECIMAL 或整数列的插入,目标是精确数据类型,因此无论要插入的值是精确值还是近似值,舍入都使用“距零的一半”。

    详情请见http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.html

    【讨论】:

      【解决方案3】:
      1. AFAIK 点是十进制值的标准表示法。使用逗号可能会触发 SQL 解析错误,或者如果语法上下文允许逗号存在,则可能会被忽视。

      2. 您是如何定义DECIMAL 列的精度的?

        如果是DECIMAL(10, 2),它将总共有 10 个数字,其中 2 个是十进制值(有 2 个小数舍入意味着 10.215 保存为 10.2210.214 变为 10.21)。

        如果是DECIMAL(10),它将没有任何十进制值并被四舍五入为整数。

      3. 如果您使用FLOATDOUBLE PRECISION,则不必指定十进制值的个数,但它有其自身的缺陷。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多