Задать вопрос
AusTiN
@AusTiN

Необычное поведение MySQL при UPDATE?

Доброго времени суток.

Имеется таблица с колонкой типа FLOAT (в ней хранится состояние некоего виртуального счёта).

Списание производится следующим запросом:

UPDATE client_data SET `client_balance` = (`client_balance` - %сумма%) WHERE `id` = %id клиента%



Но работает это следующим образом:


1) Было 1.5, списали 1 — осталось 0,5 (как и должно быть)

2) Было 1.1, списали 1 — осталось 0.1 (как и должно быть)

3) Было 1.1, списали 1.1 — осталось (внимание) 2,38419E-8!


Собственно, непонятно такое поведение. Почему так?
  • Вопрос задан
  • 3121 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 1
pel
@pel
Почитайте тут: dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
Во float хранятся приближенные значения. Используйте decimal
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@SadGnome
Советую почитать вот это: dev.mysql.com/doc/refman/5.1/en/problems-with-float.html
Такое поведения связано с особенностью хранения вещественных чисел. Причем это относится практически ко всем языкам программирования.
Для хранения баланса действительно лучше использовать тип DECIMAL.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Потому что это float.
Округляйте или используйте тип decimal.
Ответ написан
amarox
@amarox
сталкивался с такой же проблемой. помогает изминение типа float на decimal
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы