我在表格中有双字段。当我从双参数中扣除一个小数部分时,它会产生奇怪的问题。
表中的金额为0.068
当我扣除0.06时,它变为
0.0080000000000001
我的简单查询更新是
UPDATE
subscriber
SET
balance = balance - _amount
其中_amount是Double paramter
由于它是一种遗留实现,我目前无法更改列类型。所以在查询中需要一些解决方法
答案 0 :(得分:3)
有什么问题? double precision
是一个浮点数,它使用二进制表示来近似十进制值。
如果您想要精确的数字,请使用固定点表示。这样的列将被声明为decimal
。您可以更改此用途alter table
:
alter table change column balance decimal(10, 4); -- or whatever is appropriate
特别是,不建议使用浮点数存储货币值。
答案 1 :(得分:2)
如果您无法更改类型,可以尝试以下内容:
UPDATE
subscriber
SET
balance = ((balance * 10000) - (_amount * 10000)) / 10000
因此减法不使用小数。