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