Autor Tema: Almacenar montos exactos de Bolívares en MySQL  (Leído 7781 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado redireccion

  • Novato
  • *
  • Mensajes: 2
  • Puntuación: 0
    • Ver Perfil
Almacenar montos exactos de Bolívares en MySQL
« : 18 de octubre de 2012, 07:36:50 pm »
Buenas noches amigos,

Sé que es una pregunta muy básica pero como estoy trabajando con montos, no quiero que me quede ninguna duda ya que es delicado si un valor no coincide en la facturación, ¿cuál sería la mejor manera de almacenar montos exactos en una base de datos MySQL?

Agradecido de antemano cualquier colaboración, ¡saludos!

Desconectado Kuroisuna

  • Novato
  • *
  • Mensajes: 6
  • Puntuación: 0
    • Ver Perfil
Re:Almacenar montos exactos de Bolívares en MySQL
« Respuesta #1 : 18 de octubre de 2012, 07:57:04 pm »
Buenas amigo, depende principalmente de que tanta exactitud necesites.
Pero para evitar cualquier problema de redondeo te recomiendo utilizar un campo tipo DECIMAL o NUMERIC (Son similares: http://dev.mysql.com/doc/refman/5.0/es/precision-math-decimal-changes.html)

Luego con una simple función puedes convertir 12345,123 en Bs 12.345,12:
Código: [Seleccionar]
<?php
function aBolivares$monto ) {
     return( 
"Bs " number_format$monto2",""." ) );
}
?>
« Última Modificación: 18 de octubre de 2012, 07:59:11 pm por Kuroisuna »

Desconectado redireccion

  • Novato
  • *
  • Mensajes: 2
  • Puntuación: 0
    • Ver Perfil
Re:Almacenar montos exactos de Bolívares en MySQL
« Respuesta #2 : 18 de octubre de 2012, 09:25:46 pm »
Fíjate, esa es la parte que me confunde, estoy usando actualmente decimal(15,2) y cuando ingreso montos grandes, solo me almacena un número y ya, estoy trabajando hasta con centimos y no estoy seguro de cual seria los parametros del decimal al usar nuestra moneda.

Desconectado ashrey

  • Moderador Global
  • Fanático
  • *****
  • Mensajes: 471
  • Puntuación: 7
  • Sexo: Masculino
  • Wombat Team
    • Ver Perfil
    • Blog de ABerroteran
Re:Almacenar montos exactos de Bolívares en MySQL
« Respuesta #3 : 18 de octubre de 2012, 10:16:35 pm »
Es mejor trabajar con 3 decimales para almacenar a pesar que solo se muestren 2. Como lo estas guardando? Recuerda que Mysql usa el punto como separador decimal.

Desconectado Kuroisuna

  • Novato
  • *
  • Mensajes: 6
  • Puntuación: 0
    • Ver Perfil
Re:Almacenar montos exactos de Bolívares en MySQL
« Respuesta #4 : 19 de octubre de 2012, 05:42:11 pm »
Ummm... Buen punto el de Ashrey.

¿Te devuelve un int? hazte unas pruebas imprimiendo en pantalla el monto que genera tu aplicación pasándolo por un floatval():

Código: [Seleccionar]
<?php
     
echo floatval$monto );
     
// O usa un var_dump, si te devuelve un int está mal...
     
var_dump$monto );
?>

Si no te entendí dame un ejemplo más práctico a ver...  :)

En DECIMAL el primer parámetro es el número de dígitos máximo y el segundo es el número de decimales. Te recomiendo DECIMAL(10, 3), aunque depende de la aplicación.

Realiza las pruebas para verificar que el valor que ingresas en la DB sea efectivamente un float o un double y no un string, si es string y guardas en un campo DECIMAL te va a devolver NULL o 0.

Desconectado erha

  • Novato
  • *
  • Mensajes: 15
  • Puntuación: 1
  • Sexo: Masculino
  • Chief Software Engineer
    • Ver Perfil
Re:Almacenar montos exactos de Bolívares en MySQL
« Respuesta #5 : 08 de noviembre de 2012, 12:15:16 pm »
Hola, te recomiendo que cambies el tipo de dato del campo a float(20,2) y siempre debes estar seguro de que el dato que viene del formulario sea un flotante, es decir, que tenga decimales
Chief Software Engineer
PHP & MySQL Developer
Guadalajara, Jalisco

Desconectado ashrey

  • Moderador Global
  • Fanático
  • *****
  • Mensajes: 471
  • Puntuación: 7
  • Sexo: Masculino
  • Wombat Team
    • Ver Perfil
    • Blog de ABerroteran
Re:Almacenar montos exactos de Bolívares en MySQL
« Respuesta #6 : 08 de noviembre de 2012, 05:34:20 pm »
Hola, te recomiendo que cambies el tipo de dato del campo a float(20,2) y siempre debes estar seguro de que el dato que viene del formulario sea un flotante, es decir, que tenga decimales

Float no da un guardado exacto, ya que el dato en decimal debe covertirse a binario, en esa conversión se pierde precisión, lo mejor es usar el tipo DECIMAL