El tipo decimal
es un tipo de datos de 128 bits adecuada para los cálculos financieros y monetarios.
El tipo decimal
puede representar valores que van desde 1.0 × 10 -28 hasta aproximadamente 7.9 × 10 con 28-29 dígitos significativos.
El conjunto finito de valores de tipo decimal
son de la forma (-1) s × c × 10 -e, donde el signo s es 0 o 1, la coeficiente c está dada por 0 ≤ c , y la escala e es tal que 0 ≤ e ≤ 28.
El tipo decimal
no admite ceros, infinitos o NaN firmados. Un decimal
se representa como un entero de 96 bits escalado por una potencia de diez. Para decimales con un valor absoluto menor a 1.0m, el valor es exacto al 28 decimal ,, pero no más.
Para decimales con un valor absoluto mayor o igual a 1.0m, el valor es exacto para 28 o 29 dígitos. Contrariamente a los tipos de datos float
y double
, los números fraccionarios decimales como 0.1 se pueden representar exactamente en la representación decimal. En las representaciones float
y double
, tales números son a menudo fracciones infinitas, haciendo que esas representaciones sean más propensas a errores de redondeo.
Si uno de los operandos de un operador binario es de tipo decimal
, entonces el otro operando debe ser de tipo integral o del tipo decimal
. Si hay un operando de tipo integral presente, se convierte a decimal
antes de que se realice la operación.
El resultado de una operación en valores del tipo decimal
es el resultado del cálculo de un resultado exacto (escala de preservación, como se define para cada operador) y luego se redondea para ajustarse a la representación. Los resultados se redondean al valor representable más cercano y, cuando un resultado es igualmente cercano a dos valores representables, al valor que tiene un número par en la posición de dígito menos significativo (esto se conoce como "redondeo bancario"). Un resultado de cero siempre tiene un signo de 0 y una escala de 0.
Si una operación aritmética decimal produce un valor menor o igual a 5 x 10 -29 en valor absoluto, el resultado de la operación se convierte en cero . Si una operación aritmética decimal produce un resultado que es demasiado grande para el formato decimal
, se lanza un System.OverflowException
.
El tipo decimal
tiene una mayor precisión pero menor alcance que los tipos de coma flotante. Por lo tanto, las conversiones de los tipos de punto flotante a decimal
pueden producir excepciones de desbordamiento, y las conversiones de decimal
a los tipos de coma flotante pueden causar pérdida de precisión. Por estas razones, no existen conversiones implícitas entre los tipos de coma flotante y decimal
, y sin moldes explícitos, no es posible mezclar operandos de coma flotante y decimal
en la misma expresión.
El el artículo vinculado fue útil; este Sr. Skeet parece una fuente confiable para preguntas relacionadas con C#. Él tiene muchos artículos interesantes. –
throw new SomeOneDoesntKnowJonSkeetException(); –
@Jouke: no es necesario un bloque 'try/catch', nunca se lanzará. –