2010-09-22 9 views
14

¿Qué tipo (Float o decimal) se usa mejor para almacenar precios en una base de datos mysql?¿Flotante o decimal para los precios?

+1

¿Qué base de datos? Algunos como Oracle solo tienen decimal – Mark

+0

Ver [Usar flotación o decimal para el importe en dólares de la aplicación de contabilidad?] (Http://stackoverflow.com/questions/61872/use-float-or-decimal-for-accounting-application-dollar-amount "Desbordamiento de pila"). – Andrew

+0

Es para una base de datos mysql pero si hay diferencias entre otras me gusta escucharla. – tom

Respuesta

32

Los flotantes no son exactos y pueden presentar errores de redondeo acumulativos. Decimal es el mejor formato de información financiera que debe ser exacto.

+3

El decimal tampoco es exacto, pero no es exacto en una camino que esperamos. –

+0

Si el significado del comentario de Michael no está claro, vea su respuesta a continuación. – MaxVT

9

Para los cálculos financieros se utiliza decimal

Según IEEE 754 flotadores eran siempre binarios, sólo los nuevos formatos IEEE 754R decimales definido estándar. Muchas de las partes binarias fraccionarias nunca pueden igualar la representación decimal exacta. Cualquier número binario se puede escribir como m/2^n (m, n enteros positivos), cualquier número decimal como m/(2^n * 5^n). Como los binarios carecen del factor primo 5, todos los números binarios se pueden representar exactamente por decimales, pero no al revés.

0.3 = 3/(2^1 * 5^1) = 0.3 

0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125] 

    1/4  1/8  1/16  1/32 

Así que para los cálculos financieros se utiliza decimal no flota

0

por favor utilice BigDecimal, ya que es la mejor para los precios, ya que los peniques se redondean adecuadamente al dólar.

Joshua Bloch recomienda BigDecimal.

+3

¿Ves una etiqueta "java" en alguna parte? –

+0

@Michael me tienes !! . Utilizo para buscar un nuevo filtro de preguntas por Java, así que tengo esta pregunta. –

1

Cuando almacenamos un número en flotante no guardamos el número exacto, es una aproximación. La parte entera obtiene la prioridad y la parte fraccionaria es tan cercana como el tamaño de letra. Entonces, si tiene cálculos y necesita resultados precisos, use Decimal.

13

precios son valores decimales, y se espera que los cálculos en que se comporten como fracciones decimales cuando se trata de redondeo, literales, etc.

eso es exactamente lo que hacen los tipos decimales.

flotadores se almacenan como fracciones binarias, y lo hacen no se comportan como fracciones decimales - su comportamiento no es lo que la gente con frecuencia utilizan para matemáticas decimal esperar. Lea The Floating-Point Guide para obtener explicaciones detalladas.

Para valores de dinero, nunca use nunca tipos de flotación binarios, ¡especialmente cuando tiene disponible un tipo de decimal perfecto!

Cuestiones relacionadas