使用double类型时,双精度在mysql中无法正常工作

时间:2016-05-26 11:22:28

标签: mysql sql database tsql

我在表格中有双字段。当我从双参数中扣除一个小数部分时,它会产生奇怪的问题。

表中的金额为0.068

当我扣除0.06时,它变为

0.0080000000000001

我的简单查询更新是

UPDATE 
     subscriber 
SET 
     balance = balance - _amount

其中_amount是Double paramter

由于它是一种遗留实现,我目前无法更改列类型。所以在查询中需要一些解决方法

2 个答案:

答案 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

因此减法不使用小数。