十进制数据类型正在四舍五入值
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.22
和 10.214
变为 10.21
)。
如果是DECIMAL(10)
,它将没有任何十进制值并被四舍五入为整数。
如果您使用FLOAT
或DOUBLE PRECISION
,则不必指定十进制值的个数,但它有其自身的缺陷。
【讨论】:
以上是关于十进制数据类型正在四舍五入值的主要内容,如果未能解决你的问题,请参考以下文章
Spark Java 将数据帧中的每个值四舍五入到小数点后两位。