我将货币值存储在mysql表中作为浮点数。
问题是,mysql正在向上或向下舍入数字。离。 12345.68四舍五入为12345.7
如何阻止这种情况或者我应该使用更好的数据类型?
我想将原始值保留在小数点后两位。
答案 0 :(得分:4)
请勿使用FLOAT
类型。请改用DECIMAL
。 Float将十进制数转换为二进制数,从而导致舍入(精度损失)。十进制将数字存储为小数 - 无转换。
在你的情况下,将列定义为DECIMAL(12,2)
应该没问题。根据预期的数字大小选择宽度(第一个数字)。在该示例中,预期大小为12位数(包括小数点后的数字)。
答案 1 :(得分:1)
将适用列的定义从其当前设置更改为:
2
上一个代码段中的1
指示MySQL维护最多2个小数位的值。目前可能会设置为9
;因此观察到的行为。您可以随意将sys.platform
更改为更适用的值。
更多关于floats and precision。
Related answer, which advises on not using float
s, but instead decimal