SQL

Tipo de datos Float y Real de SQL Server

Estrada Web Group
Estrada Web Group
Tipo de datos Float y Real de SQL Server

Los tipos de datos flotantes (Float) y reales (Real) en SQL Server utilizan el formato de número de punto flotante. Real es un número de punto flotante de precisión simple, mientras que Float es un número de punto flotante de precisión doble. Los números de coma flotante pueden almacenar números muy grandes o muy pequeños. Pero esta a costa de la precisión. En este tutorial, se verán en detalle y aprenderás la diferencia entre los tipos de datos flotantes y decimales o numéricos.

¿Qué son los números de punto flotante?

Los números de punto flotante no tienen un punto decimal fijo. El punto decimal puede aparecer en cualquier parte del número, es decir, flota. Por lo tanto, se conoce como números de punto flotante. El comportamiento de float y real sigue el estándar IEEE para aritmética de punto flotante
 
Los números de punto flotante se almacenan utilizando la notación científica en formato binario. La notación científica es una forma de escribir números muy grandes o muy pequeños. Está escrito en el siguiente formato.

Significand x base exponencial!
Notación cientifica

Por ejemplo, 650.000.000 se puede escribir en notación científica como 6,5 ? 10^8, donde 6,5 es Significando, 10 es la base y 8 es exponente.
 
Los números de coma flotante pueden ser de 8 bytes (64 bits o precisión doble) o de 4 bytes (32 bits o precisión simple).

Flotante y Real en SQL Server

El SQL Server tiene dos tipos de datos flotantes y reales que almacenan los números de punto flotante.

  • El tipo de datos flotantes es un formato de precisión doble de 64 bits. Utiliza 8 bytes de almacenamiento
  • El tipo de datos reales es un formato de precisión simple de 32 bits. Utiliza 4 bytes de almacenamiento 

La representación binaria de estos números es como se muestra a continuación.

Float: formato de precisión doble de 64 bits

0

Sign
1

00000000000

Exponent
11

0000000000 0000000000 0000000000 0000000000 0000000000 00

Mantissa (significand)
52

 

Float: formato de precisión doble de 32 bits

0

Sign
1

00000000

Exponent
11

0000000000 0000000000 000

Mantissa (significand)
23

El primer bit es un bit de signo que indica si el número es positivo o negativo. El 0 significa positivo. El exponente es de 11 bits (Float) o de 8 bits (Real). El significante usa los lugares restantes. 52 bits en caso de tipo de datos Float y 23 bits en caso de tipo de datos Real.

Creación de columnas Float y Real

La sintaxis para crear una columna flotante es float(n), n debe tener un valor entre 1 y 53. El valor predeterminado de n es 53.
 
Float(1) a Float(23) creará la columna de precisión única de 32 bits, que en realidad es un tipo de datos real. Por lo tanto, SQL Server lo asigna automáticamente al tipo de datos Real.
 
Float (24) a float (53) creará la columna de 64 bits de doble precisión, por lo tanto, se convierten simplemente en float.
 

create table testFloat
(
 col10 float(10),
 col20 float(20),
 col23 float(23),
 col24 float(24),
 col25 float(25),
 col30 float(30),
 colF  float,
 colR  real,
)


 Número decimal vs punto flotante

El número decimal y el punto flotante pueden almacenar números decimales, por lo que es muy importante saber la diferencia entre ellos.
 

Decimal Float
La posición del lugar decimal es fija. La posición del lugar decimal no es fija
La precisión máxima que puede manejar es de 38 dígitos (incluidos los puntos decimales) Puede manejar una gran cantidad de datos
Los resultados son más precisos en comparación con el flotador. Las operaciones aritméticas pueden resultar en pérdida de precisión
Los valores de datos decimales se almacenan exactamente como se especifica. Utiliza el formato de 64 bits de doble precisión o el formato de 32 bits de precisión simple para almacenar datos. Esto da como resultado una aproximación del valor almacenado.
Requiere más espacio de almacenamiento Requiere menos espacio de almacenamiento

Dado que el resultado es exacto, puede usarlos para realizar comprobaciones de igualdad (operadores = y <>), redondeo de números, etc.

Siempre que el resultado se mantenga dentro del valor máximo y mínimo permitido.

Evite el uso de controles de igualdad flotante (operadores = y <>), redondeo de números, etc. Además, evite usarlos en aplicaciones como aplicaciones financieras donde la precisión es importante.

 
El punto flotante puede manejar una gran cantidad de datos

Por ejemplo, un tipo de datos decimal(9,2) usa 5 bytes de almacenamiento pero puede almacenar hasta -9999999.99 a 9999999.99.

Los tipos de datos Int usan 4 bytes y pueden almacenar números desde -2,147,483,648 hasta 2,147,483,647. Pero no podemos usarlo para almacenar fracciones.
 
Los datos de punto flotante (tipo de datos reales, formato de 32 bits de precisión única) pueden almacenar valores entre
-340, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000 y 340, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 0.0.

Pérdida de precisión

Un número de coma flotante puede tener un costo de precisión, para ver este tema sigue los siguientes pasos.

Primero crea una tabla con una columna flotante
 

create table testFloat
(
   colFloat  float,
)

Ahora inserta la suma de .1 + .2 en esa columna. Usamos la función CAST para hacer que los números se conviertan a float.
 

insert into testFloat (colFloat)
 values ( CAST(.1 as FLOAT) + CAST( .2 as FLOAT))


Consulta y comprueba si el valor está insertado.
 

select * from testFloat
 
*Result
0.3

 

Ahora, recupera el número usando una condición where. La consulta no recuperará ningún registro.
 

select * from testFloat where colFloat= .3
select * from testFloat where colFloat= cast(.3 as float)
 
***Result
No Records


Esto se debe a que el .1 se almacena aproximadamente como 0.100 000 001 490 116 119 384 765 625 (en precisión simple de 32 bits). Puedes consultar el Convertidor
 
La pérdida de precisión también puede ocurrir en Decimal. Pero sucede solo en caso de que el resultado final o el resultado intermedio exceda los límites para el tipo de datos decimal.

Cuál usar

  • Se prefiere el decimal si el número permanece por debajo de la precisión máxima proporcionada por el decimal, que es 38.
  • Pero para manejar los números grandes, es posible que debas usar el valor real o float.
  • Además, si el espacio de almacenamiento es el criterio principal, utiliza el tipo de datos real, que ocupa solo 4 bytes. Siempre que la precisión de la pérdida no afecte.
  • Evita el uso de controles de igualdad flotante (=), controles de desigualdad (<>), etc., redondeo de números, etc. Además, evita usarlos en aplicaciones financieras donde la precisión es importante.

 

 

 

Compartir artículo:

Más artículos geniales

¿Cómo obtener datos distintos en SQL Server con SQL Distinct?

¿Cómo obtener datos distintos en SQL Server con SQL Distinct?

Descubre cómo utilizar DISTINCT en SQL Server para obtener valores únicos en consultas. Aprende ejemplos prácticos y mejores prácticas para optimizar tus resultados. Domina SQL Server y potencia tus habilidades en bases de datos.

Ver artículo completo
Optimiza tus consultas en SQL Server con NOT EXISTS: Aprende a utilizarla en este artículo

Optimiza tus consultas en SQL Server con NOT EXISTS: Aprende a utilizarla en este artículo

Resumen: en este artículo sobre NOT EXISTS de SQL Server, aprenderás sobre la sintaxis y uso de esta cláusula en consultas de bases de datos.

Ver artículo completo
Tipo de datos TIME de SQL Server para almacenar la hora

Tipo de datos TIME de SQL Server para almacenar la hora

Resumen: en este tutorial, aprenderás cómo almacenar la hora de un día en la base de datos utilizando el tipo de datos TIME de SQL Server

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla