十进制数据类型在舍入数值。

4
我将我的MySQL字段表数据类型设置为decimal,因为根据我所读到的,我可以使用带有逗号/点的价格存储在decimal数据类型字段中...问题是每当我存储任何带有逗号或点的数据时,MySQL会自动四舍五入。例如,当我执行以下查询时:
UPDATE table SET field = 114.21 WHERE id = 1;
然后字段被设置了,但值被四舍五入为114,而不是显示我在查询中设置的数据(114.21)-是否有任何解决方案?还是我应该使用其他的数据类型?

1
你是否将该值绑定为参数? - Asad Saeeduddin
3个回答

15
  1. AFAIK,“.”是小数值的标准符号,使用逗号可能会触发SQL解析错误,或者如果语法上下文允许出现逗号,则可能不会被注意到。

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

    如果是DECIMAL(10, 2),它将有总共10个数字,其中2个为小数值(采用2位小数舍入,即10.215保存为10.22,而10.214变为10.21)。

    如果是DECIMAL(10),它将没有任何小数值,并将舍入为整数。

  3. 如果您使用FLOATDOUBLE PRECISION,则无需指定小数位数,但它也有其缺陷。


0

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

在插入十进制值时,mySQL 会四舍五入。

从文档中可以看到:

对于插入到 DECIMAL 或整数列中的值,目标是确切的数据类型,因此无论要插入的值是精确还是近似的,都使用“向零四舍五入”进行舍入。

有关详细信息,请参见http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.html


0

之前我也遇到过关于小数点数字使用什么的问题。但是通过使用DOUBLE(10,2)作为我的DATATYPE,问题得到了解决,并且在保存时数据库中显示了精确的数字。希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接