Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.
El Decimal tipo de valor representa números decimales que van desde 79,228,162,514,264,337,593,543,950,950,335 a negativo 79,228,162,514,264,337,593,543,950,335. El valor predeterminado de un Decimal
es 0. El Decimal tipo de valor es adecuado para los cálculos financieros que requieren un gran número de dígitos enteros y fraccionarios significativos y sin errores de redondeo. El Decimal tipo no elimina la necesidad de redondear. En su lugar, minimiza los errores debidos al redondeo. Por ejemplo, el código siguiente genera un resultado de 0,9999999999999999999999999999999999999 en lugar de 1.
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);
let dividend = Decimal.One
let divisor = 3m
// The following displays 0.9999999999999999999999999999 to the console
printfn $"{dividend/divisor * divisor}"
Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor)
Cuando el resultado de la división y multiplicación se pasa al Round método , el resultado no sufre ninguna pérdida de precisión, como se muestra en el código siguiente.
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2));
let dividend = Decimal.One
let divisor = 3m
// The following displays 1.00 to the console
printfn $"{Math.Round(dividend/divisor * divisor, 2)}"
Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2))
Un número decimal es un valor de punto flotante que consta de un signo, un valor numérico donde cada dígito del valor oscila entre 0 y 9 y un factor de escala que indica la posición de un separador decimal flotante que separa las partes integrales y fraccionarios del valor numérico.
La representación binaria de un Decimal
valor es de 128 bits que consta de un número entero de 96 bits y un conjunto de 32 bits de marcas que representan elementos como el signo y el factor de escala que se usa para especificar qué parte de es una fracción decimal. Por lo tanto, la representación binaria de un valor Decimal con el formato ((-2de 96 a 296) / 10(0 a 28)), donde -(296-1) es igual a MinValuey 296-1 es igual a MaxValue. Para obtener más información sobre la representación binaria de Decimal valores y un ejemplo, vea el Decimal(Int32[]) constructor y el GetBits método .
El factor de escalado también conserva los ceros finales en un número Decimal. Los ceros finales no afectan al valor de un Decimal número en operaciones aritméticas o de comparación. Sin embargo, el método ToString podría revelar ceros finales si se aplica una cadena de formato adecuada.
Consideraciones sobre la conversión
Este tipo proporciona métodos que convierten valores Decimal a y desde SByte, Int16, Int32, Int64, Byte, UInt16, UInt32 y UInt64. Las conversiones de estos tipos enteros a Decimal son conversiones de ampliación que nunca pierden información ni generan excepciones.
Las conversiones de Decimal a cualquiera de los tipos integrales son conversiones de restricción, que redondean el valor de Decimal al número entero más cercano hacia cero. Algunos lenguajes, como C#, también admiten la conversión de Decimal valores a Char valores. Si el resultado de estas conversiones no se puede representar en el tipo de destino, se produce una OverflowException excepción.
El Decimal tipo también proporciona métodos que convierten valores de Decimal a y desde valores de Single y Double. Las conversiones de Decimal a o SingleDouble son conversiones de restricción que podrían perder precisión, pero no información sobre la magnitud del valor convertido. La conversión no produce ninguna excepción.
Conversiones de Single o Double a Decimal producen una OverflowException excepción si el resultado de la conversión no se puede representar como un Decimal.
Realización de operaciones en valores decimales
El Decimal tipo admite operaciones matemáticas estándar, como suma, resta, división, multiplicación y negación unaria. También puede trabajar directamente con la representación binaria de un Decimal valor llamando al GetBits método .
Para comparar dos valores Decimal, puede utilizar los operadores de comparación numéricos estándar o llamar al método CompareTo o al método Equals.
También puede llamar a los miembros de la Math clase para realizar una amplia gama de operaciones numéricas, incluida la obtención del valor absoluto de un número, determinar el valor máximo o mínimo de dos Decimal valores, obtener el signo de un número y redondear un número.
Ejemplos
En el ejemplo de código siguiente se muestra el uso de Decimal.
/// <summary>
/// Keeping my fortune in Decimals to avoid the round-off errors.
/// </summary>
class PiggyBank {
protected decimal MyFortune;
public void AddPenny() {
MyFortune = Decimal.Add(MyFortune, .01m);
}
public decimal Capacity {
get {
return Decimal.MaxValue;
}
}
public decimal Dollars {
get {
return Decimal.Floor(MyFortune);
}
}
public decimal Cents {
get {
return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
}
}
public override string ToString() {
return MyFortune.ToString("C")+" in piggy bank";
}
}
/// Keeping my fortune in Decimals to avoid the round-off errors.
type PiggyBank() =
let mutable myFortune = 0m
member _.AddPenny() =
myFortune <- Decimal.Add(myFortune, 0.01m)
member _.Capacity =
Decimal.MaxValue
member _.Dollars =
Decimal.Floor myFortune
member _.Cents =
Decimal.Subtract(myFortune, Decimal.Floor myFortune)
override _.ToString() =
$"{myFortune:C} in piggy bank"
' Keeping my fortune in Decimals to avoid the round-off errors.
Class PiggyBank
Protected MyFortune As Decimal
Public Sub AddPenny()
MyFortune = [Decimal].Add(MyFortune, 0.01D)
End Sub
Public ReadOnly Property Capacity() As Decimal
Get
Return [Decimal].MaxValue
End Get
End Property
Public ReadOnly Property Dollars() As Decimal
Get
Return [Decimal].Floor(MyFortune)
End Get
End Property
Public ReadOnly Property Cents() As Decimal
Get
Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
End Get
End Property
Public Overrides Function ToString() As String
Return MyFortune.ToString("C") + " in piggy bank"
End Function
End Class