System.Decimal yapısı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

Değer Decimal türü pozitif 79.228.162.514.264.337.593.543.950,950 arasında değişen ondalık sayıları temsil eder 3335-negatif 79.228.162.514.264.337.593.543.950.335. varsayılan değeri Decimal 0'dır. Değer Decimal türü, çok sayıda önemli tam sayı ve kesirli basamak gerektiren ve yuvarlama hatası içermeyen finansal hesaplamalar için uygundur. Tür Decimal yuvarlama gereksinimini ortadan kaldırmaz. Bunun yerine yuvarlama nedeniyle hataları en aza indirir. Örneğin, aşağıdaki kod 1 yerine 0,99999999999999999999999999999999999 sonucunu üretir.

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)

Bölme ve çarpmanın sonucu yönteme Round geçirildiğinde, aşağıdaki kodda gösterildiği gibi sonuç duyarlık kaybı olmaz.

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))

Ondalık sayı, bir işaretten, değerdeki her basamak 0 ile 9 arasında değişen sayısal bir değerden ve sayısal değerin integral ve kesirli kısımlarını ayıran kayan ondalık noktasının konumunu gösteren bir ölçeklendirme faktöründen oluşan kayan nokta değeridir.

Bir Decimal değerin ikili gösterimi, 96 bitlik bir tamsayıdan oluşan 128 bit ve değerinin hangi bölümünün ondalık kesir olduğunu belirtmek için kullanılan işaret ve ölçeklendirme faktörü gibi öğeleri temsil eden 32 bit bayrak kümesidir. Bu nedenle, formdaki bir Decimal değerin ikili gösterimi ((-296 - 296) / 10(0 - 28)), burada -(2 96-1) MinValueöğesine ve 296-1'eMaxValue eşittir. Değerlerin ikili gösterimi Decimal ve bir örnek hakkında daha fazla bilgi için oluşturucuya Decimal(Int32[]) ve yöntemine GetBits bakın.

Ölçeklendirme faktörü, bir Decimal sayıdaki sondaki sıfırları da korur. Sondaki sıfırlar, aritmetik veya karşılaştırma işlemlerinde bir Decimal sayının değerini etkilemez. Ancak, uygun bir biçim dizesi uygulanırsa, sondaki sıfırlar yöntemi tarafından ToString ortaya çıkabilir.

Dönüştürmeyle ilgili dikkat edilmesi gerekenler

Bu tür, değerleri , , Int16, , Int32Int64, UInt16UInt32Byteve UInt64 değerlerinden ve değerlerine SBytedönüştüren Decimal yöntemler sağlar. Bu tam sayı türlerinden 'a Decimal dönüştürmeler, hiçbir zaman bilgi kaybetmeden veya özel durumlar oluşturmadan dönüştürmeleri genişletir.

tamsayı türlerinden Decimal herhangi birine dönüştürmeler, değeri sıfıra doğru en yakın tamsayı değerine yuvarlayan Decimal dönüştürmeleri daraltmadır. C# gibi bazı diller de değerlerin Decimal değerlere dönüştürülmesi destekler Char . Bu dönüştürmelerin sonucu hedef türünde temsil edilemiyorsa, bir OverflowException özel durum oluşturulur.

türüDecimal, değerleri ve değerlerden SingleDouble ve değerlerine dönüştüren Decimal yöntemler de sağlar. dönüştürmeleri Decimal , SingleDouble duyarlık kaybına neden olabilecek ancak dönüştürülen değerin büyüklüğü hakkında bilgi veremeyen dönüştürmeleri daraltıyor. Dönüştürme bir özel durum oluşturmaz.

Dönüştürmenin sonucu olarak Decimaltemsil edilemiyorsa veya'dan DecimalDoubleSingle dönüştürmeler özel OverflowException durum oluşturur.

Ondalık değerlerde işlem gerçekleştirme

türü Decimal toplama, çıkarma, bölme, çarpma ve tekli olumsuzlama gibi standart matematiksel işlemleri destekler. Yöntemini çağırarak GetBits doğrudan bir Decimal değerin ikili gösterimiyle de çalışabilirsiniz.

İki Decimal değeri karşılaştırmak için standart sayısal karşılaştırma işleçlerini kullanabilir veya veya Equals yöntemini çağırabilirsinizCompareTo.

Ayrıca, bir sayının mutlak değerini alma, iki Decimal değerin Math en büyük veya en düşük değerini belirleme, bir sayının işaretini alma ve bir sayıyı yuvarlama gibi çok çeşitli sayısal işlemler gerçekleştirmek için sınıfın üyelerini çağırabilirsiniz.

Örnekler

Aşağıdaki kod örneğinde kullanımı gösterilmektedir 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