Quiero almacenar 3.50 en una tabla mysql. Tengo un flotador en el que lo almaceno, pero se almacena como 3.5, no como 3.50. ¿Cómo puedo obtener el cero final?almacenamiento de cantidades de dinero en mysql
Respuesta
No guarde los valores del dinero como flotador, utiliza el decimal o de tipo numérico:
Documentation for MySQL Numeric Types
EDITAR & aclaración:
valores flotantes son vulnerables a errores de redondeo se Tienen una precisión limitada por lo menos no le importa que solo obtenga 9.99 en lugar de 10.00 debe usar DECIMAL/NUMERIC ya que son números de punto fijo que no tienen tales problemas.
¿Realmente importa si almacena como 3.5, 3.50 o incluso 3.500?
Lo que es realmente importante es cómo se muestra después de que se recupera de la base de datos.
¿O me falta algo aquí?
Además, no use un flotador, use un decimal. Float tiene todo tipo de problemas de redondeo y no es muy grande.
¿Por qué quiere almacenar "3.50" en su base de datos? 3.5 == 3.50 == 3.5000 en lo que respecta a la base de datos.
Su presentación y formato de figuras/fechas/etc. debe hacerse en la aplicación, no en la base de datos.
Si utiliza tipos DECIMAL o NUMERIC, puede declararlos como por ejemplo DECIMAL (18, 2) que forzaría 2 decimales incluso si fueran 0. Dependiendo de qué tan grandes valores espera, puede cambiar el valor de la primer parámetro.
Para almacenar valores se puede utilizar un DECIMAL (10,2) campo, a continuación, puede utilizar la función FORMAT:
SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1
No es generalmente una buena idea para almacenar el dinero como un flotador como el redondeo los errores pueden ocurrir en los cálculos.
Considere utilizar DECIMAL (10,2) en su lugar.
Incluso los números como 0.1 y 0.2 son imposibles de representar en coma flotante binario, sin importar la precisión. http: //en.wikipedia.org/wiki/Floating_point – Ray
Binario no puede representar con precisión puntos flotantes con solo un número limitado de bits. No es por lo que la pérdida de los datos muuch pero en realidad errores de conversión .. Here's the manual giving examples
Se puede ver esto en acción en su navegador, ver por sí mismo en este fragmento de código.
<script>
var floatSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
floatSum += 0.1;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*0.1; // 1
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + floatSum + " = " + (expectedSum==floatSum) + "<br />");
// --- using integers instead ---
// Assume the example above is adding £0.10 ten times to make £1.00
// With integers, we will use store money in pence (100 pence (also written 100p) in £1)
var intSum = 0;
// add 0.1 to floatSum 10 times
for (var i=0; i<10; i++) {
intSum += 10;
}
// if the repetative adding was correct, the floatSum should be equal to 1
var expectedSum = 10*10; // 100
// you can see that floatSum does not equal 1 because of floating point error
document.write(expectedSum + " == " + intSum + " = " + (expectedSum==intSum) + "<br />");
document.write("To display as £ instead of pence, we can divide by 100 (presentation only) : £" + intSum/100 + "<br />");
</script>
- 1. PHP/MySQL: ¿Mejores operaciones de dinero/prácticas de almacenamiento?
- 2. Duplicar mi dinero: mi marco utiliza los dobles para cantidades monetarias
- 3. Buscar grandes cantidades de texto constantemente actualizado en mysql
- 4. Almacenamiento de datos de calendario en MySQL
- 5. MySQL binario de almacenamiento BLOB utilizando VS Sistema OS del archivo: archivos de gran tamaño, grandes cantidades, grandes problemas
- 6. ¿Está bien almacenar dinero como decimal (22,2) en MySQL?
- 7. Almacenamiento de contraseñas hash en MySQL
- 8. Almacenamiento de enteros muy grandes en MySQL
- 9. Almacenamiento de microsegundos en MySQL: ¿qué solución?
- 10. almacenamiento de datos binarios en mysql
- 11. Almacenamiento de direcciones IPv6 en MySQL
- 12. almacenamiento de datos JSON en MySQL
- 13. Almacenamiento de matriz de bytes Mysql
- 14. Cómo modelar una cantidad de dinero en Java
- 15. Dilema del motor de almacenamiento MySQL
- 16. El almacenamiento de MySQL GUID/UUID
- 17. Almacenamiento Double.POSITIVE_INFINITY en MySQL (entidad EJB/JBoss)
- 18. valores hash Almacenamiento SHA1 en MySQL
- 19. Almacenamiento FILESTREAM en SqlServer -> equivalente MySQL?
- 20. Número de formato como dinero
- 21. Google mostrar gráficos dinero no Porcentajes
- 22. PHP - Almacenamiento de texto en la base de datos MySQL
- 23. ¿Cómo cambiar el tipo de motor de almacenamiento en MySQL?
- 24. Almacenamiento de entradas en la base de datos MySQL
- 25. Formato de dinero PHP en moneda india?
- 26. Trazando cantidades masivas de datos
- 27. Dibujando grandes cantidades de píxeles en OpenGL
- 28. Mejor motor de almacenamiento MySQL para usar en el almacenamiento de la sesión PHP
- 29. MySQL Trigger - Almacenamiento de un SELECT en una variable
- 30. consulta el almacenamiento en caché de PHP para MySQL Rendimiento
que se menciona la cuestión de redondeo. Mi punto era que no debería preocuparse por cómo se almacena sino cómo se muestra. No almacenaría la información financiera en 2 lugares decimales. Las tasas de cambio son 5 y almacenamos 6, pero solo se muestran como 2. –
(comentario irrelevante anterior eliminado). +1 para un buen punto en el redondeo. –