Nosotros usamos double
.
*jadear*
¿Por qué?
Porque puede representar cualquier número de 15 dígitos sin restricciones sobre dónde está el punto decimal . ¡Todo por unos miserables 8 bytes!
Entonces puede representar:
0.123456789012345
123456789012345.0
... y cualquier cosa en el medio.
Esto es útil porque estamos tratando con monedas globales , ydouble
podemos almacenar los diversos números de decimales que probablemente encontraremos.
Un solo double
campo puede representar 999,999,999,999,999s en yenes japoneses, 9,999,999,999,999.99s en dólares estadounidenses e incluso 9,999,999.999999999s en bitcoins
Si intenta hacer lo mismo con decimal
, necesita lo decimal(30, 15)
que cuesta 14 bytes.
Advertencias
Por supuesto, el uso double
no está exento de advertencias.
Sin embargo, no es una pérdida de precisión como algunos tienden a señalar. Aunque double
puede no ser internamente exacto al sistema base 10 , podemos hacerlo exacto redondeando el valor que extraemos de la base de datos a sus decimales significativos. Si es necesario, eso es. (por ejemplo, si se va a generar y se requiere una representación de base 10).
Las advertencias son que, cada vez que realizamos operaciones aritméticas con él, necesitamos normalizar el resultado (redondeándolo a sus decimales significativos) antes de:
- Realizando comparaciones en él.
- Escribiéndolo nuevamente en la base de datos.
Otro tipo de advertencia es que, a diferencia de decimal(m, d)
donde la base de datos evitará que los programas inserten un número con más de m
dígitos, no existen tales validaciones double
. Un programa podría insertar un valor ingresado por el usuario de 20 dígitos y terminará siendo registrado silenciosamente como una cantidad inexacta.
deimal(10,2)
es lo que uso ... puedes ajustar los valores dependiendo del tamaño esperado