2014-01-02 4 views
1

Я выполняю запрос, который вычитает баланс из строки на 1. Однако после того, как запрос будет успешно выполнен один раз, математика отключится.MySQL UPDATE Math не работает?

Если я вычитаю 0,1 из 1,0, это дает мне 0,9. Однако в следующий раз, когда я вычту 0.1, я получаю 0.8000000000000001. Вот запрос, который я использую:

UPDATE ACCOUNTS SET BALANCE=BALANCE-$amt WHERE ID=$user_id 

$ amt is 0.1 и $ user_id = 1, в данном случае.

Почему математика изменяется после успешного запроса? Благодаря!

+2

[Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html) –

+0

Не храните свой баланс как 'float', попробуйте сохранить его как' decimal (10,2) ' –

+0

@TinTran Я изменил BALANCE на десятичный, но он даже не будет математически. Он остается прежним. Я не знаю, что это (10,2). – Alec

ответ

0
UPDATE ACCOUNTS SET BALANCE=ROUND((BALANCE-$amt),2) WHERE ID=$user_id 

попробовать это ....

1

Благодаря @tintran я понял, что он должен был сделать с ДЛИНОЙ/VALUE частью является десятичной. Я изменил его на (10,8). 8 - это то, что я имею дело в биткойне и 8 десятичных разрядах - это максимум, на который я мог бы пойти.

Спасибо всем!

Смежные вопросы