如何阻止 mysql 舍入浮点值?
how can I stop mysql from rounding float values?
我将货币值作为浮点数存储在 mysql table 中。
问题是,mysql 将数字四舍五入。
例如。 12345.68 四舍五入为 12345.7
我怎样才能阻止它或者我应该使用更好的数据类型?
我想将原始值保留在小数点后两位内。
将适用列的定义从其当前设置更改为:
FLOAT(9,2)
前面代码段中的 2
指示 MySQL 将值保留到小数点后两位。目前可能设置为 1
;因此观察到的行为。请随意将 9
更改为更适用的值。
更多关于 floats and precision。
Related answer, which advises on not using float
s, but instead decimal
.
不要使用FLOAT
类型。请改用 DECIMAL
。 Float 将十进制数转换为二进制数,这会导致四舍五入(精度损失)。 Decimal 将数字存储为小数 - 无转换。
在您的情况下,将列定义为 DECIMAL(12,2)
应该没问题。根据数字的预期大小选择宽度(第一个数字)。示例中,期望大小为12位(包括小数点后的数字)。
我将货币值作为浮点数存储在 mysql table 中。
问题是,mysql 将数字四舍五入。
例如。 12345.68 四舍五入为 12345.7
我怎样才能阻止它或者我应该使用更好的数据类型?
我想将原始值保留在小数点后两位内。
将适用列的定义从其当前设置更改为:
FLOAT(9,2)
前面代码段中的 2
指示 MySQL 将值保留到小数点后两位。目前可能设置为 1
;因此观察到的行为。请随意将 9
更改为更适用的值。
更多关于 floats and precision。
Related answer, which advises on not using float
s, but instead decimal
.
不要使用FLOAT
类型。请改用 DECIMAL
。 Float 将十进制数转换为二进制数,这会导致四舍五入(精度损失)。 Decimal 将数字存储为小数 - 无转换。
在您的情况下,将列定义为 DECIMAL(12,2)
应该没问题。根据数字的预期大小选择宽度(第一个数字)。示例中,期望大小为12位(包括小数点后的数字)。