如何阻止 mysql 舍入浮点值?
Posted
技术标签:
【中文标题】如何阻止 mysql 舍入浮点值?【英文标题】:how can I stop mysql from rounding float values? 【发布时间】:2017-05-20 10:00:24 【问题描述】:我将货币值作为浮点数存储在 mysql 表中。
问题是,mysql 正在向上或向下舍入数字。
例如。 12345.68 舍入为 12345.7
我怎样才能阻止这种情况,或者我应该使用更好的数据类型吗?
我想保留小数点后 2 位内的原始值。
【问题讨论】:
【参考方案1】:将适用列的定义从其当前设置更改为:
FLOAT(9,2)
前面sn-p 中的2
指示MySQL 将值保留至小数点后2 位。目前可能设置为1
;因此观察到的行为。随意将9
更改为更适用的值。
更多关于floats and precision。
Related answer, which advises on not using float
s, but instead decimal
.
【讨论】:
@Ivan Georgiev 的回答应该是被接受的。【参考方案2】:不要使用FLOAT
类型。请改用DECIMAL
。浮点数将十进制数转换为二进制数,这会导致舍入(精度损失)。 Decimal 将数字存储为小数 - 无需转换。
在您的情况下,将列定义为 DECIMAL(12,2)
应该没问题。根据数字的预期大小选择宽度(第一个数字)。在示例中,预期大小为 12 位(包括小数点后的数字)。
【讨论】:
以上是关于如何阻止 mysql 舍入浮点值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在包含浮点数和 Nan 或 None 值的同一列中舍入浮点值?