Работать с деньгами (десятичными числами) в PHP считается безопасным? - PullRequest
10 голосов
/ 27 сентября 2010

В моей базе данных MySQL есть таблица items с полем DECIMAL(10,2) с именем price.

При извлечении этих значений безопасно ли выполнять вычисления и тому подобное с этими числами в PHP? Или я в конечном итоге буду иметь потенциальные ошибки округления и тому подобное, которые часто встречаются при работе с типами данных с плавающей запятой?

Как PHP справляется с этими вещами под прикрытием? Безопасно ли делать денежные расчеты с помощью PHP?

Ответы [ 2 ]

10 голосов
/ 27 сентября 2010

Большинство людей измеряют валюту в наименьшем номинале в PHP - например, 10 долларов США будут отображаться как 1000 центов.

В таком случае / 100 тривиально получить доллары, и вы выигралинапример, 4.9999999 значения, вызванные арифметикой с плавающей запятой.

В качестве альтернативы вы можете использовать значения с плавающей запятой и округлять до ближайших минимальных центовых значений (например, кратных 5).

Кажется, вы уже знаете об этом, но для других, это все еще требуется, читая :)

9 голосов
/ 27 сентября 2010

Вы можете использовать библиотеку PHP, которая выполняет математику произвольной точности, например BC Math или GMP .

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

...