После того, как я выполнил запрос через mysql_query () в php
«обновить установленную сумму сделки = сумма-100, где идентификатор = 123»
Если предыдущее значение суммы было 101, после минус 100 , значение должно быть 1.
Но я проверил данные по-разному:
возвращается с 0.780009989(какая-то фигура, как эта, часть «0,78» актуальна, после того, как это просто образец от меня, я не могу вспомнить точно, но я думаю, что это не имеет значения)
при использовании mysql_fetch_object () в php,он по-прежнему возвращает правильный ответ «1».
Я выполнил тест выполнения запроса 100 раз в цикле,но «ошибка» не всегда возникает, просто иногда.
Возможно ли это вызвано неопределенной длиной и десятичной длиной клона «сумма»?
Почему php funciton может получить это правильно?
Пожалуйста скажите мне, что-то пошло не так.
СОЗДАТЬ СТОЛ
trade
(
id
int (11) NOT NULL AUTO_INCREMENT,
amount
двойное НЕ NULL,
ОСНОВНОЙ КЛЮЧ (id
))
ENGINE = InnoDB AUTO_INCREMENT = 123 DEFAULT CHARSET = utf8;
Да, это вызвано double
тип поля количества, и если вам нужна точность, используйте DECIMAL
, Измените тип и посмотрите, получите ли вы то, что хотите:
ALTER TABLE trade MODIFY amount DECIMAL(10,2);
Это будет хранить 10 цифр (8 до десятичной точки и 2 после). Измените это, чтобы отразить данные, которые вы будете хранить в вашей БД.
Попробуй это:
update trade set amount=CAST(amount AS SIGNED)-100 where id=123;
Ref: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast