我已将MySQL
字段表数据类型设置为decimal
,因为根据我的阅读,我可以在decimal
数据中以逗号/点存储价格类型字段...问题是每当我使用逗号或点存储任何数据时,MySQL会自动向上或向下舍入。例如。当我执行以下查询时:
UPDATE table SET field = 114.21 WHERE id = 1;
然后设置了字段,但是该值四舍五入为114,而不是显示我在查询中设置的数据(114.21
) - 是否有任何解决方案?或者我应该使用其他数据类型?
答案 0 :(得分:10)
AFAIK点是十进制值的标准表示法。使用逗号可能会触发SQL解析错误,或者如果语法上下文允许使用逗号,则可能会被忽略。
您是如何定义DECIMAL
列的精确度的?
如果是DECIMAL(10, 2)
,则总共有10个数字,其中2个是十进制值(2位小数舍入意味着10.215
保存为10.22
和{{1} }变成10.214
)。
如果是10.21
,它将没有任何小数值并且舍入为整数。
如果您使用DECIMAL(10)
或FLOAT
,则不必指定小数值,但它有自己的缺陷。
答案 1 :(得分:0)
正如Mihai所说,你需要为小数类型定义适当的精度,例如: DECIMAL(10,2)表示两位小数。
当插入一个十进制值时,mySQL将会循环。
来自文档:
对于插入DECIMAL或整数列,目标是精确的数据类型,因此舍入使用“从零开始的一半”,无论要插入的值是精确的还是近似的。
有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.html。
答案 2 :(得分:0)
之前我还有一个关于如何使用小数点数的问题。但是使用 DOUBLE (10,2)作为我的 DATATYPE 解决了问题,并在保存时显示了数据库中的确切数字。希望它会有所帮助。