miércoles, 13 de noviembre de 2013

EVP2

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:

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