tipos - Diferencia entre numérico, flotante y decimal en SQL Server
sql server decimal format (7)
use los tipos de datos reales o flotantes solo si la precisión proporcionada por el decimal (hasta 38 dígitos) es insuficiente
Los tipos de datos numéricos aproximados no almacenan los valores exactos especificados para muchos números; almacenan una aproximación extremadamente cercana al valor. ( Technet )
Evite utilizar columnas flotantes o reales en las condiciones de búsqueda de la cláusula WHERE, especialmente los operadores = y <> ( Technet )
por lo general, porque la precisión proporcionada por el decimal es de [10E38 ~ 38 dígitos] si su número puede caber, y el espacio de almacenamiento más pequeño (y quizás la velocidad) de Float no es importante y no es importante tratar con comportamientos anormales y problemas de tipos numéricos aproximados aceptable, utilice decimal en general .
información más útil
- numérico = decimal (5 a 17 bytes) (Tipo de datos numéricos exactos )
- se asignará a decimal en .NET
- ambos tienen (18, 0) 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 el dinero (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) (tipo de datos numérico aproximado )
- se asignará a Single en .NET
- El sinónimo ISO de real es float (24)
- flotante y real (Transact-SQL) - MSDN
- flotante (8 bytes) (tipo de datos numéricos aproximados )
- se asignará a doble en .NET
- Todos los tipos numéricos exactos siempre producen el mismo resultado, independientemente de qué tipo de arquitectura de procesador se esté utilizando o la magnitud de los números
- El parámetro suministrado al tipo de datos flotante define el número de bits que se utilizan para almacenar la mantissa del número de punto flotante .
- El tipo de datos numérico aproximado generalmente usa menos almacenamiento y tiene mejor velocidad (hasta 20x) y también debe considerar cuándo se convirtieron en .NET
- ¿Cuál es la diferencia entre decimal, flotación y doble en C #?
- Decimal vs Doble Velocidad
- SQL Server - Asignaciones de tipos de datos .NET (desde MSDN)
fuente principal : MCTS Self-Paced Training Kit (Examen 70-433): Desarrollo de la base de datos de Microsoft® SQL Server® 2008 - Capítulo 3 - Tablas, tipos de datos e integridad declarativa de los datos Lección 1 - Selección de tipos de datos (directrices) - Página 93
Busqué en Google y también visité decimal y numérico y SQL Server Helper para analizar la diferencia entre tipos de datos numéricos, flotantes y decimales, y también para averiguar cuál se debe usar en qué situación.
Para cualquier tipo de transacción financiera (por ejemplo, para el campo de salario), ¿cuál es la preferida y por qué?
Difieren en la precedencia del tipo de datos
El decimal y el numérico son los mismos funcionalmente, pero todavía hay prioridad de tipo de datos , lo que 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 toma prioridad de tipo de datos .
Lista exhaustiva de tipos de datos por precedencia:
El caso de decimal
¿Cuál es la necesidad subyacente?
Surge del hecho de que, en última instancia, las computadoras representan, internamente, números en formato binario. Eso conduce, inevitablemente, a errores de redondeo.
Considera esto:
0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")
La elipsis de abose significa [...] "infinito". Si lo miras con atención, hay un patrón de repetición infinito (= ''0011'')
Entonces, en algún punto la computadora tiene que redondear ese valor. Esto conduce a errores de acumulación derivados del uso repetido de números que están almacenados de manera inexacta.
Digamos que desea almacenar importes financieros (que son números que pueden tener una parte fraccionaria). En primer lugar, obviamente no puede usar números enteros (los números enteros no tienen una parte fraccionaria). Desde un punto de vista puramente matemático, la tendencia natural sería usar un float
. Pero, en una computadora, los flotadores tienen la parte de un número que se encuentra después de un punto decimal, la "mantisa", limitada. Eso lleva a errores de redondeo.
Para superar esto, las computadoras ofrecen tipos de datos específicos que limitan el error de redondeo binario en las computadoras para los números decimales. Estos son los tipos de datos que deben utilizarse para representar importes financieros. Estos tipos de datos suelen ir por el nombre de Decimal
. Ese es el caso en C #, por ejemplo. O, DECIMAL
en la mayoría de las bases de datos.
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, el valor numérico es funcionalmente equivalente al tipo de datos decimales. 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 en los tipos de datos numéricos aproximados. Debido a la naturaleza aproximada de los tipos de datos reales y flotantes, no utilice estos tipos de datos cuando se requiera un comportamiento numérico exacto, como en aplicaciones financieras, en operaciones que involucren redondeo o verificaciones de igualdad. En su lugar, utilice los tipos de datos enteros, decimales, monetarios o smallmoney. Evite utilizar 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> o <comparaciones.
El decimal tiene una precisión fija, mientras que el flotador tiene una precisión variable.
EDITAR (no se pudo leer la pregunta completa): Float (53) (también conocido como real) es un número de punto flotante de doble precisión (32 bits) en SQL Server. Regular Float es un número de punto flotante de precisión simple. Doble es una buena combinación de precisión y simplicidad para muchos cálculos. Puede crear un número de precisión muy alta con decimal (hasta 136 bits), pero también debe tener cuidado de definir su precisión y escala correctamente para que pueda contener todos sus cálculos intermedios hasta el número necesario de dígitos.
No es una respuesta completa, pero un enlace útil:
"Con frecuencia hago cálculos contra valores decimales. En algunos casos, la conversión de valores decimales para flotar lo antes posible, antes de cualquier cálculo, produce una mejor precisión".
Flotante es un tipo de datos de número aproximado, lo que significa que no todos los valores en el rango del tipo de datos se pueden representar exactamente.
Decimal / Numérico es un tipo de datos de precisión fija, lo que significa que todos los valores en el rango del tipo de datos se pueden representar con precisión y escala. Puedes usar el decimal para ahorrar dinero.
La conversión de decimal o numérico a flotación puede causar cierta pérdida de precisión. Para los tipos de datos decimales o numéricos, SQL Server considera cada combinación específica de precisión y escala como un tipo de datos diferente. DECIMAL (2,2) y DECIMAL (2,4) son diferentes tipos de datos. Esto significa que 11.22 y 11.2222 son tipos diferentes, aunque este no es el caso para float. Para FLOAT (6) 11.22 y 11.2222 son los mismos tipos de datos.
También puede utilizar el tipo de datos de dinero para ahorrar dinero. Este es un tipo de datos nativo con 4 dígitos de precisión por dinero. La mayoría de los expertos prefieren este tipo de datos para ahorrar dinero.