BIBLIOTECA <NUMERIC>
Números de precisión y escala
fijas. Cuando se utiliza la precisión máxima, los valores válidos se sitúan
entre - 10^38 +1 y 10^38 - 1. Los sinónimos de ISO para decimal son dec y
dec(p, s). numeric es funcionalmente equivalente a decimal.
p (precisión)
El número total máximo de dígitos
decimales que almacenará, tanto a la izquierda como a la derecha del separador
decimal. La precisión debe ser un valor comprendido entre 1 y la precisión
máxima de 38. La precisión
predeterminada es 18.
s (escala)
El número de dígitos decimales
que se almacenará a la derecha del separador decimal. Este número se extrae de
p para determinar el número máximo de dígitos a la izquierda del separador
decimal. La escala debe ser un valor comprendido entre 0 y p. Solo es posible especificar
la escala si se ha especificado la precisión. La escala predeterminada es 0;
por lo tanto, 0 <= s <= p. Los tamaños de almacenamiento máximo varían
según la precisión.
Precisión
|
Bytes de almacenamiento
|
1 - 9
|
5
|
10-19
|
9
|
20-28
|
13
|
29-38
|
17
|
Convertir datos decimal y numeric
En el caso de los tipos de datos
decimal y numeric, SQL Server considera cada combinación específica de
precisión y escala como un tipo de datos distinto. Por ejemplo, decimal(5,5) y
decimal(5,0) se consideran tipos de datos diferentes.
En las instrucciones
Transact-SQL, una constante con un separador decimal se convierte
automáticamente a un valor de datos numeric, con la precisión y escala mínimas
necesarias. Por ejemplo, la constante 12.345 se convierte a un valor numeric
con una precisión de 5 y una escala de 3.
La conversión de valores decimal
o numeric a valores float o real puede provocar alguna pérdida de precisión. La
conversión de valores int, smallint, tinyint, float, real, money o smallmoney a
valores decimal o numeric puede provocar un desbordamiento.
De forma predeterminada, SQL
Server usa el redondeo cuando convierte un número a un valor decimal o numeric
con una precisión y una escala inferiores. Sin embargo, si la opción SET
ARITHABORT está establecida en ON, SQL Server genera un error cuando se produce
un desbordamiento. La pérdida de precisión y escala no es suficiente para
generar un error.
Cuando se conviertan valores
float o reales a valores decimales o numéricos, el valor decimal nunca tendrá
más de 17 decimales. Los valores float < 5E-18 se convertirán siempre en 0.
Ejemplo:
Ejemplo:
bool is_numeric(char *string)
{
int sizeOfString = sizeof(string);
int iteration = 0;
bool isNumeric = true;
while(iteration < sizeOfString)
{
if(!isdigit(string[iteration]))
{
isNumeric = false;
break;
}
iteration++;
}
return isNumeric;
}
No hay comentarios:
Publicar un comentario