PHP / MySQL: лучшие практики операций с деньгами / хранения?

Итак, я планирую создать приложение (PHP / MySQL), которое много работает с деньгами, и я думаю о том, как хранить и работать с деньгами, обращаясь к типу данных с плавающей запятой PHP и десятичному MySQL.

Я думал о двух вариантах. Одним из них является управление и хранение денег в формате целочисленных центов (долларов * 100), чтобы не иметь дело с неточностями с плавающей запятой, а также хранить их в БД как целочисленные. Другой - хранить в БД как десятичное и использовать BC Math в PHP для расчетов.

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

Кроме того, люди жаловались на десятичность MySQL (MySQL хранит десятичные числа в виде строк, оперирует ими как числа с плавающей точкой и т. Д.), Но это были старые сообщения. Согласно документации MySQL, текущая версия правильно обрабатывает десятичные дроби, единственная жалоба заключалась в том, что она усекает дробь значений, которая превышает объявленную длину дроби (например, если вы храните значение 12,326 в столбце, объявленном десятичным (9,2)) , но из моих исследований он округляет его, а не просто обрезает (12.326 становится 12.33), что, на мой взгляд, правильно.

И я не нашел никаких рекомендаций по хранению денег в виде десятичных дробей и вычислений с использованием PHP BCMath, и, по моему мнению, это потому, что мало кто знает о математических функциях BC и GMP.

Итак, какой вариант лучше всего использовать, учитывая точность, скорость (скорость вычислений BCMath, десятичная скорость MySQL против целого числа) и удобство программирования?

Ответы на вопрос(2)

Ваш ответ на вопрос