Por lo tanto, estoy planeando hacer una aplicación (PHP/MySQL) que trate mucho con el dinero, y estoy pensando en cómo almacenar y operar con el dinero, haciendo referencia al tipo de datos de flotación de PHP y al decimal de MySQL.PHP/MySQL: ¿Mejores operaciones de dinero/prácticas de almacenamiento?
Estaba pensando en dos opciones. Una de ellas es operar y almacenar dinero en formato de centavos enteros ($ dólares * 100) para no tener que lidiar con float en las decisiones y almacenarlo también en la base de datos como un número entero. El otro es almacenar en DB como decimal y usar BC Math en PHP para cálculos.
Así que busqué en Google toda la noche para averiguar cuál es la mejor opción para usar y no encontré una respuesta clara. La única opción razonable que he visto es el entero de centavos (que realmente no me gusta porque implicaría una gran cantidad de conversión de dólares a centavos y viceversa antes de cada pantalla en el navegador y antes de almacenar en el DB) .
Además, las personas se han quejado de MySQL decimal (MySQL almacena decimales como cadenas, los opera como flotadores, etc.), pero eso eran publicaciones antiguas. Según la documentación de MySQL, la versión actual maneja los decimales correctamente, la única queja es que trunca la fracción de los valores que excede la longitud de fracción declarada (por ejemplo, si almacena un valor de 12.326 en una columna declarada decimal (9,2)) , pero a partir de mis investigaciones lo redondea en lugar de simplemente truncar (12.326 se convierte en 12.33), lo cual es correcto en mi opinión.
Y, no encontré ninguna recomendación sobre el almacenamiento de dinero como decimales y hacer cálculos con PHP BCMath, y en mi opinión, esto se debe a que pocas personas conocen las funciones matemáticas BC y GMP.
Entonces, ¿cuál sería la mejor opción para usar, teniendo en cuenta la precisión, la velocidad (velocidad de cálculos de BCMath, velocidad decimal de MySQL frente a número entero) y la comodidad de programación?
Aunque un poco tarde para el PO, para cualquier persona interesada, de código abierto un [PHP Biblioteca de dinero] (https://github.com/brick/money) que realiza cálculos seguros de dineros de cualquier tamaño, usando PHP puro, GMP o BCMath en función de lo que está disponible. Ah, y almaceno mis dineros como enteros en el DB. – Benjamin