十进制数据类型正在四舍五入值

Posted

技术标签:

【中文标题】十进制数据类型正在四舍五入值【英文标题】: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) - 有什么解决方案吗?还是我应该只使用其他数据类型?

【问题讨论】:

您是否将值绑定为参数? 【参考方案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】:

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

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

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

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

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

【讨论】:

以上是关于十进制数据类型正在四舍五入值的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的十进制值在 SQL 插入中被四舍五入为整数?

金钱应该使用啥数据类型

Spark Java 将数据帧中的每个值四舍五入到小数点后两位。

四舍五入

如何在 .NET 中将双精度值转换为具有固定小数位数的小数类型值

类型转换