Sql Server: Float vs Decimal

Creo que la comparación la gana el tipo de dato Decimal si necesitamos que se almacene la representación exacta de los números, ya que el tipo de dato float almacena una aproximación.

Vamos a citar la documentación del Sql Server 2005:

Los tipos de datos float y real se conocen como tipos de datos aproximados. El comportamiento de float y real sigue la especificación IEEE 754 acerca de los tipos de datos numéricos aproximados.

Los tipos de datos numéricos aproximados no almacenan los valores exactos especificados para muchos números; almacenan una aproximación muy precisa del valor. Para muchas aplicaciones, la pequeña diferencia entre el valor especificado y la aproximación almacenada no es apreciable. Sin embargo, a veces la diferencia se hace notar. Debido a la naturaleza aproximada de los tipos de datos float y real, no los use cuando necesite un comportamiento numérico exacto, como, por ejemplo, en aplicaciones financieras, en operaciones que conlleven un redondeo o en comprobaciones de igualdad. En su lugar, use los tipos de datos enteros, decimal, money o smallmoney.

Evite usar columnas float o real en las condiciones de búsqueda de la cláusula WHERE, especialmente los operadores = y <>. Es aconsejable limitar las columnas float y real a las comparaciones > o <. La especificación IEEE 754 proporciona cuatro modos de redondeo: redondear al más cercano, redondear hacia arriba, redondear hacia abajo y redondear a cero. Microsoft SQL Server 2005 utiliza el redondeo hacia arriba. Todos son precisos para garantizar la exactitud, aunque pueden dar como resultado valores en punto flotante ligeramente distintos. Puesto que la representación binaria de un número en punto flotante puede usar cualquiera de los esquemas válidos de redondeo, no se puede cuantificar de forma precisa un valor en punto flotante.


Más información: http://technet.microsoft.com/es-es/library/ms187912.aspx

1 comentario:

Anónimo dijo...

significa que si yo guardo con tipo float 2.34 no se guardara exactamente asi o a que te refieres que se guarda aproximado?