【发布时间】:2017-05-20 10:00:24
【问题描述】:
我将货币值作为浮点数存储在 mysql 表中。
问题是,mysql 正在向上或向下舍入数字。
例如。 12345.68 舍入为 12345.7
我怎样才能阻止这种情况,或者我应该使用更好的数据类型吗?
我想保留小数点后 2 位内的原始值。
【问题讨论】:
我将货币值作为浮点数存储在 mysql 表中。
问题是,mysql 正在向上或向下舍入数字。
例如。 12345.68 舍入为 12345.7
我怎样才能阻止这种情况,或者我应该使用更好的数据类型吗?
我想保留小数点后 2 位内的原始值。
【问题讨论】:
将适用列的定义从其当前设置更改为:
FLOAT(9,2)
前面sn-p 中的2 指示MySQL 将值保留至小数点后2 位。目前可能设置为1;因此观察到的行为。随意将9 更改为更适用的值。
更多关于floats and precision。
Related answer, which advises on not using floats, but instead decimal.
【讨论】:
不要使用FLOAT 类型。请改用DECIMAL。浮点数将十进制数转换为二进制数,这会导致舍入(精度损失)。 Decimal 将数字存储为小数 - 无需转换。
在您的情况下,将列定义为 DECIMAL(12,2) 应该没问题。根据数字的预期大小选择宽度(第一个数字)。在示例中,预期大小为 12 位(包括小数点后的数字)。
【讨论】: