Después de de una prolongada selección de información hemos podido solucionar este inconveniente que suelen tener muchos usuarios. Te brindamos la solución y nuestro objetivo es servirte de gran apoyo.
Solución:
Su fuente no es de ninguna manera oficial. Data de 2011 y ni siquiera reconozco a los autores. Si el tipo de dinero fuera oficialmente “desaconsejado”, PostgreSQL lo diría en el manual, lo cual no es así.
Para una fuente mas oficiallea este hilo en pgsql-general (¡solo de esta semana!), con declaraciones de desarrolladores principales, incluidos D’Arcy JM Cain (autor original del tipo de dinero) y Tom Lane:
Respuesta relacionada (¡y comentarios!) sobre mejoras en versiones recientes:
- Informe de Jasper: no se pudo obtener el valor del campo ‘x’ de la clase ‘org.postgresql.util.PGmoney’
Básicamente, money
tiene sus usos (muy limitados). Postgres Wiki sugiere evitarlo en gran medida, excepto en aquellos casos estrictamente definidos. La ventaja sobre numeric
es actuación.
decimal
es solo un alias para numeric
en Postgres, y muy utilizado para datos monetarios, siendo un tipo de “precisión arbitraria”. El manual:
El tipo
numeric
puede almacenar números con una gran cantidad de dígitos. Está especialmente recomendado para almacenar cantidades monetarias y otras cantidades donde se requiera exactitud.
Personalmente, me gusta almacenar moneda como integer
representando centavos si nunca ocurren centavos fraccionarios (básicamente donde el dinero tiene sentido). Eso es más eficiente que cualquier otra de las opciones mencionadas.
Numérico con precisión forzada de 2 unidades. Nunca use un tipo de datos flotante o flotante para representar la moneda porque si lo hace, la gente no estará contenta cuando la cifra final del informe financiero sea incorrecta por más o menos unos pocos dólares.
El tipo de dinero se deja solo por razones históricas, por lo que puedo decir.
Tus opciones son:
bigint
: almacena la cantidad en centavos. Esto es lo que usan las transacciones EFTPOS.decimal(12,2)
: almacena la cantidad con exactamente dos decimales. Esto es lo que usa la mayoría del software de contabilidad general.float
: terrible idea – precisión inadecuada. Esto es lo que usan los desarrolladores ingenuos.
La opción 2 es la más común y la más fácil de usar. Haga que la precisión (12 en mi ejemplo, lo que significa 12 dígitos en total) sea tan grande o pequeña como mejor le convenga.
Tenga en cuenta que si está agregando varias transacciones que fueron el resultado de un cálculo (p. ej., que implica un tipo de cambio) en un solo valor que tiene significado comercial, la precisión debe ser mayor para proporcionar un valor exacto. macro valor; considere usar algo como decimal(18, 8)
por lo que la suma es precisa y los valores individuales se pueden redondear a una precisión de centavo para su visualización.
Sección de Reseñas y Valoraciones
Al final de la web puedes encontrar las referencias de otros creadores, tú aún puedes insertar el tuyo si te gusta.