PHP + MySQL Нерегулярные вопросы расчета свыше миллиона - PullRequest
0 голосов
/ 12 марта 2020

У меня очень странная проблема, когда я пытаюсь пополнить запасы с помощью функции PHP.

Вот функция:

function add_stock($products_id, $add_quantity) {
global $db;
$db->Execute("update " . TABLE_PRODUCTS . "
                  set products_quantity = products_quantity + " . (int)$add_quantity . ", products_ordered = products_ordered - " . (int)$add_quantity . " where products_id = '" . (int)$products_id . "'");
}

Итак, в приведенной выше функции область, на которой я сосредотачиваюсь, это когда products_quantity добавляется к $add_quantity.

Все работает нормально, но когда я тестирую продукт, который имеет 1 000 000 или больше в количестве, это делает странно расчеты.

Например, тестируемый продукт имел количество 1 000 000. При добавлении 8 с помощью функции получилось 1 000 010. Поэтому вместо добавления 8 добавилось 10. Я снова запустил его, используя 6 и 8 и он достигает 1 000 020, а затем 1 000 0030. Как приращение 10. Я в замешательстве.

Я пробовал это с дюжиной других продуктов, количество которых было меньше миллиона, и это работало безупречно каждый раз.

РЕДАКТИРОВАТЬ: После того, как спросили через комментарии - DataType для products_quantity является FLOAT.

1 Ответ

2 голосов
/ 12 марта 2020

FLOAT имеет низкую точность и подлежит округлению. Это проблема.

Измените тип данных столбца на DECIMAL, NUMERIC, INT или BIGINT.

...