Solución:
Dado que el dinero necesita una representación exacta, no utilice tipos de datos que solo sean aproximados, como float
. Puede usar un tipo de datos numéricos de punto fijo para eso, como
decimal(15,2)
-
15
es la precisión (longitud total del valor, incluidos los decimales) -
2
es el número de dígitos después del punto decimal
Consulte los tipos numéricos de MySQL:
Estos tipos se utilizan cuando es importante preservar la precisión exacta, por ejemplo, con monetario datos.
Puedes usar DECIMAL
o NUMERIC
ambos son lo mismo
Los tipos DECIMAL y NUMERIC almacenan valores de datos numéricos exactos. Estos tipos se utilizan cuando es importante preservar la precisión exacta, por ejemplo, con datos monetarios. En MySQL, NUMERIC se implementa como DECIMAL, por lo que las siguientes observaciones sobre DECIMAL se aplican igualmente a NUMERIC. : MySQL
es decir DECIMAL(10,2)
Buena lectura
Yo prefiero usar BIGINT
y almacenar los valores en por multiplicar por 100, de modo que se convierta en un número entero.
Por ejemplo, para representar un valor monetario de 93.49
, el valor se almacenará como 9349
, mientras mostramos el valor podemos dividir por 100 y pantalla. Esto ocupará menos espacio de almacenamiento.
Precaución:
La mayoría de las veces no actuamos
currency * currency
multiplicación, en caso de que lo estemos haciendo entonces dividir el resultado con 100 y almacenar, para que vuelva a la precisión adecuada.