Saltar al contenido

Diferencia entre numérico, flotante y decimal en SQL Server

Hacemos una revisión completa cada sección de nuestra página web con el objetivo de enseñarte en todo momento la información más veraz y actualizada.

Solución:

utilizar el flotador o verdadero tipos de datos sólo si la precisión proporcionada por decimal (hasta 38 dígitos) es insuficiente

  • Los tipos de datos numéricos aproximados no almacenan los valores exactos especificados para muchos números; ellos almacenan muy cerca aproximación del valor. (Technet)

  • Evite el uso de columnas flotantes o reales en las condiciones de búsqueda de la cláusula WHERE, especialmente los operadores = y <> (Technet)

tan generalmente porque el precisión proporcionada por decimal es [10E38 ~ 38 digits] si su número puede caber en él, y el espacio de almacenamiento más pequeño (y tal vez la velocidad) de Float no es importante y no es aceptable tratar con comportamientos anormales y problemas de tipos numéricos aproximados, use Decimal generalmente.

más información útil

  • numérico = decimal (5 a 17 bytes) (Exacto tipo de datos numéricos)
    • se asignará a Decimal en .NET
    • ambos tienen (18, 0) como parámetros predeterminados (precisión, escala) en el servidor SQL
    • escala = número máximo de dígitos decimales que se pueden almacenar a la derecha del punto decimal.
    • tenga en cuenta que money (8 bytes) y smallmoney (4 bytes) también son exactos y se asignan a Decimal In .NET y tienen 4 puntos decimales (MSDN)
    • decimal y numérico (Transact-SQL) – MSDN
  • real (4 bytes) (Aproximado tipo de datos numéricos)
    • se asignará a Single en .NET
    • El sinónimo ISO de real es float(24)
    • flotante y real (Transact-SQL) – MSDN
  • flotante (8 bytes) (Aproximado tipo de datos numéricos)
    • se asignará a Double en .NET
  • Todos exacto los tipos numéricos siempre producen el mismo resultado, independientemente del tipo de arquitectura de procesador que se utilice o la magnitud de los números
  • El parámetro proporcionado al tipo de datos flotante define el número de bits que se utilizan para almacenar el mantisa del número de punto flotante.
  • El tipo de datos numérico aproximado generalmente usa menos almacenamiento y tiene una mejor velocidad (hasta 20x) y también debe considerar cuándo se convirtieron en .NET
    • ¿Cuál es la diferencia entre Decimal, Float y Double en C#?
    • Decimal vs Doble Velocidad
    • SQL Server: asignaciones de tipos de datos de .NET (de MSDN)

Tipos de datos numéricos exactos

Tipos de datos numéricos aproximados

fuente principal : Kit de capacitación a su propio ritmo de MCTS (Examen 70-433): Desarrollo de bases de datos de Microsoft® SQL Server® 2008 – Capítulo 3 – Tablas, tipos de datos e integridad de datos declarativos Lección 1 – Elección de tipos de datos (directrices) – Página 93

Directrices de MSDN: uso de datos decimales, flotantes y reales

La precisión máxima predeterminada de los tipos de datos numéricos y decimales es 38. En Transact-SQL, numérico es funcionalmente equivalente al tipo de datos decimal. Utilice el tipo de datos decimal para almacenar números con decimales cuando los valores de los datos deben almacenarse exactamente como se especifica.

El comportamiento de float y real sigue la especificación IEEE 754 sobre tipos de datos numéricos aproximados. Debido a la naturaleza aproximada de los tipos de datos float y real, no utilice estos tipos de datos cuando se requiera un comportamiento numérico exacto, como en aplicaciones financieras, en operaciones que impliquen redondeo o en comprobaciones de igualdad. En su lugar, utilice los tipos de datos entero, decimal, dinero o dinero pequeño. Evite usar columnas flotantes o reales en las condiciones de búsqueda de la cláusula WHERE, especialmente los operadores = y <>. Es mejor limitar las columnas flotantes y reales a comparaciones > o <.

Difieren en la precedencia del tipo de datos

Decimal y Numérico son lo mismo funcionalmente pero todavía hay precedencia del tipo de datosque puede ser crucial en algunos casos.

SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')

El tipo de datos resultante es numérico porque se necesita precedencia del tipo de datos.

Lista exhaustiva de tipos de datos por precedencia:

Link de referencia

Si crees que te ha resultado de provecho este post, sería de mucha ayuda si lo compartieras con otros programadores y nos ayudes a extender esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *