tipos real money float ejemplo declarar datos data sql-server types

sql server - ejemplo - Real vs. Floating Point vs. Money



sql server data types (4)

Eche un vistazo a lo que todo científico informático debería saber sobre la aritmética de punto flotante .

Los números flotantes en las computadoras no representan las fracciones decimales exactamente. En cambio, representan fracciones binarias . La mayoría de los números fraccionarios no tienen una representación exacta como una fracción binaria, por lo que hay un poco de redondeo. Cuando una fracción binaria tan redondeada se traduce a una fracción decimal, obtienes el efecto que describes.

Para almacenar valores de dinero, las bases de datos SQL normalmente proporcionan un tipo DECIMAL que almacena dígitos decimales exactos. Este formato es un poco menos eficiente para las computadoras, pero es bastante útil cuando desea evitar errores de redondeo decimal.

¿Por qué cuando guardo un valor de, por ejemplo, 40.54 en SQL Server en una columna de tipo Real, me devuelve un valor que es más parecido a 40.53999878999 en lugar de 40.54? He visto esto algunas veces, pero nunca he descubierto por qué sucede. ¿Alguien más ha experimentado este problema y, si es así, lo causa?



Los números de coma flotante usan fracciones binarias, y no se corresponden exactamente con las fracciones decimales.

Por dinero, es mejor almacenar el número de centavos como número entero, o usar un tipo de número decimal. Por ejemplo, Decimal (8,2) almacena 8 dígitos, incluidos 2 decimales (xxxxxx.xx), es decir, una precisión de ciento.


Para agregar una aclaración, los números de coma flotante almacenados en una computadora se comportan como se describe en otras publicaciones aquí, porque tal como se describe, se almacena en formato binario. Esto significa que, a menos que su valor (tanto la mantisa como los componentes exponenciales del valor) sean potencias de dos, y no puedan representarse exactamente.

Algunos sistemas, por otro lado, almacenan números fraccionarios en decimales (SQL Server Decimal y Numeric data types, y Oracle Number datatype por ejemplo) y luego su representación interna es, por lo tanto, exacta para cualquier número que tenga una potencia de 10. Pero luego los números que no son potencias de 10 no pueden representarse exactamente.