2012-11-21 55 views
2

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

UPDATE table SET field = 114.21 WHERE id = 1;

然后字段被设置,但值舍入到114,而不是显示我在查询设置的数据(114.21) - 是有任何溶液那?或者我应该只使用其他数据类型?

+0

您是否将该值绑定为参数? –

回答

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

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

    如果是DECIMAL(10, 2)它将具有总共10个数字组成,其中2是十进制值(具有2小数四舍五入含义10.215保存为10.2210.214和变​​)的。

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

  3. 如果您使用FLOATDOUBLE PRECISION您不必指定小数值的数量,但它有它自己的缺陷。

+0

谢谢! :) <3分钟,直到答案接受> – Scott

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解决,并且它在您保存数据库时显示确切的数字。希望它会有所帮助。