Итак, я планирую сделать приложение (PHP/MySQL), которое много касается денег, и я думаю о том, как хранить и работать с деньгами, ссылаясь на тип данных float PHP и десятичный код MySQL.
Я думал о двух вариантах. Один из них - работать и хранить деньги в формате целых центов ($ доллары * 100), чтобы не иметь дело с float inprecisions и хранить его в БД как целое. Другая - хранить в DB как десятичную и использовать BC Math в PHP для вычислений.
Итак, я всю ночь искал в googled, чтобы узнать, какой вариант лучше всего использовать, и не нашел ясного ответа. Единственный разумный вариант, который я видел, это целые центы (что мне не очень нравится, потому что это будет означать много конвертирования от долларов до центов и наоборот) перед каждым отображением в браузере и перед сохранением в БД).
Кроме того, люди жаловались на то, что MySQL десятичный (MySQL хранит десятичные числа в виде строк, использует их как плавающие и т.д.), но это были старые сообщения. Согласно документации MySQL, текущая версия обрабатывает десятичные знаки правильно, единственная жалоба заключалась в том, что она обрезает долю значений, превышающих объявленную длину дробной части (например, если вы сохраняете значение 12.326 в столбце, объявленном десятичным (9,2)), но из моих исследований он округляет его, а не просто усекает (12.326 становится 12.33), что, по моему мнению, является правильным.
И я не нашел рекомендаций по хранению денег как десятичных знаков и расчетам с использованием PHP BCMath, и, на мой взгляд, это объясняется тем, что мало кто знает о математических функциях BC и GMP.
Итак, что было бы лучшим вариантом для использования, учитывая точность, скорость (скорость вычислений BCMath, десятичную скорость MySQL и целое число) и удобство программирования?