mysql decimal类型的精度问题

若是是小数精度是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
相关文章
相关标签/搜索