如何阻止mysql舍入浮点值?

时间:2017-01-05 18:29:25

标签: mysql floating-accuracy

我将货币值存储在mysql表中作为浮点数。

问题是,mysql正在向上或向下舍入数字。

离。 12345.68四舍五入为12345.7

如何阻止这种情况或者我应该使用更好的数据类型?

我想将原始值保留在小数点后两位。

2 个答案:

答案 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 floats, but instead decimal