У меня есть таблица items
в моей базе данных MySQL с полем DECIMAL(10,2)
называемым price
.
Получая эти значения, безопасно ли выполнять вычисления и такие с этими числами в PHP? Или я получу потенциальные ошибки округления и такие вещи, которые характерны при работе с типами данных с плавающей запятой?
Как PHP обрабатывает эти вещи за крышкой? Безопасно ли делать расчеты с помощью PHP?
Вы можете использовать библиотеку PHP, которая выполняет произвольную математику точности, такую как BC Math или GMP .
При использовании центов или минимально возможной денежной единицы иногда работает, что, если вы столкнетесь с ситуацией, когда вы должны иметь дело с долями центов? Например, если вы имеете дело с продажей и покупкой акций, вы должны иметь большую точность, чем просто центы. В подобных ситуациях вы должны использовать произвольную математику точности.
Большинство людей измеряют валюту в наименьшем номинале в PHP – например, 10 долларов США долларов будут показаны как 1000 центов.
Тогда тривиально / 100
получить доллары, и вы не получите, например, 4.9999999
значений, вызванных арифметикой с плавающей запятой.
В качестве альтернативы вы можете использовать значения с плавающей запятой и округлые до ближайших значений минимального значения (например, это может быть кратное 5).
Кажется, вы уже знаете об этом, но для других это все еще необходимо прочитать 🙂