若是是小数精度是16位,计算的时候要特别当心,好比balance和locked的类型是decimal(32,16),下面的sql就会有精度问题:sql
UPDATE accounts SET balance = balance - '2.2345678977654321', locked = locked + '2.2345678977654321' WHERE accounts.id = 1
改为下面的就能够了code
UPDATE accounts SET balance = balance - cast('2.2345678977654321' as decimal(32,16)), locked = locked + cast('2.2345678977654321' as decimal(32,16)) WHERE accounts.id = 1
更新:ci
问题出在用了字符串上,改为以下也就正确了:字符串
UPDATE accounts SET balance = balance - 2.2345678977654321, locked = locked + 2.2345678977654321 WHERE accounts.id = 1