sql >> Base de Datos >  >> RDS >> Sqlserver

¿Usar flotante o decimal para el monto en dólares de la aplicación de contabilidad?

¿Se debe usar el tipo de datos flotante o decimal para montos en dólares?

La respuesta es fácil. Nunca flota. NUNCA !

De acuerdo con IEEE 754, los flotantes eran siempre binarios, solo el nuevo estándar IEEE 754R definía los formatos decimales. 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 primo factor 5 , todos los números binarios se pueden representar exactamente con 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

Entonces terminas con un número mayor o menor que el número decimal dado. Siempre.

¿Por que importa? Redondeo.

El redondeo normal significa 0..4 hacia abajo, 5..9 hacia arriba. Entonces lo hace importa si el resultado es 0.049999999999 .... o 0.0500000000 ... Usted puede saber que significa 5 centavos, pero la computadora no lo sabe y redondea 0.4999 ... abajo (incorrecto) y 0.5000 ... arriba (derecha).

Dado que el resultado de los cálculos de punto flotante siempre contiene pequeños términos de error, la decisión es pura suerte. Se vuelve inútil si desea un manejo decimal de redondeo a par con números binarios.

¿No estás convencido? ¿Insiste en que en su sistema de cuentas todo está perfectamente bien? ¿Activos y pasivos iguales? ¡Bien, luego tome cada uno de los números con formato dados de cada entrada, analícelos y súmelos con un sistema decimal independiente!

Compare eso con la suma formateada. Ups, algo anda mal, ¿no?

Para ese cálculo, se requería una precisión y fidelidad extremas (usamos Oracle's FLOAT) para que pudiéramos registrar la "mil millonésima parte de un centavo" que se estaba acumulando.

No ayuda contra este error. Porque todas las personas asumen automáticamente que la computadora suma bien y prácticamente nadie verifica de forma independiente.