post icon

Qué tipo de dato debo usar entre Decimal, Float o Real?

Hace tiempo que quería escribir sobre éste tema, ya que es muy importante considerar esto antes de comenzar a desarrollar un sistema nuevo (digo antes, porque si no lo hacen luego tendrán serios problemas).

En mi suerte (si existe tal cosa) supe de ésto hace tiempo gracias a que un día estuve leyendo la documentación oficial sobre los tipos de datos en SQL Server, pero para desgracia de un par de compañeros laborales ellos tuvieron que descubrirlo por las malas, cuando las cosas no salían como soñaban que saldrían.

La historia viene más o menos así (si mi memoria no falla), se utilizaron campos de tipo Real para las tablas que almacenaban los asientos contables, y durante un tiempo se estuvo cargando de manera manual y automática la misma, durante varios meses todo funcionaba bien, cerraba y cuadraba como Dios manda, pero un día los asientos no cuadraron y se comenzó a revisar que sucedía, luego de mucho pelear con el mismo se dieron cuenta que al momento de hacer redondeos los mismos no eran iguales.

¿Qué había sucedido? Éstos 3 tipos de datos son muy similares y en muchos casos se pueden utilizar indiferentemente, pero cuando se requiere de exactitud no. El tipo de dato Float y Real lo que hacen es almacenar el valor numérico lo más aproximado posible al valor real, ésto según la carga del procesador, si el mismo está muy ocupado la aproximación es menor. En cambio el Decimal almacena el valor real, exacto, lo que hace que trabajar con éste tipo de datos en procesos pesados sea más lento (es una desventaja que vale la pena cuando necesitamos exactitud).

Para considerar, cuando necesitemos exactitud por ejemplo para sistema de construcciones civiles, financieros, hacer comparaciones de igualdad o que estarán en la claúsulas WHERE del SQL usemos Decimal.

Comentarios desde Facebook:

  1. avatar
    Flako Mozilla Firefox Windows
    25 Noviembre 2010 at 10:40 #

    Ja, totalmente de acuerdo..
    Yo administro un ERP (WAN) que usa todo float.. y es un quilombo los redondeos..
    Cambiar todo de float a MONEY (en MSSQL), no es tan facil analizar las implicaciones.. por lo que hay que estar casteanto los float a money cada ves q se operan con ellos. 🙁

    Decisiones de diseño? esas cosas no te las comenta en vendedor.. JA

Responder