Struct System.Decimal

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Decimal Jenis nilai mewakili angka desimal mulai dari positif 79.228.162.514.264.337.593.543.950 335 menjadi negatif 79.228.162.514.264.337.593.543.950.335. Nilai default dari adalah Decimal 0. Decimal Jenis nilai sesuai untuk perhitungan keuangan yang memerlukan sejumlah besar digit integral dan pecahan yang signifikan dan tidak ada kesalahan round-off. Jenis Decimal tidak menghilangkan kebutuhan untuk pembulatan. Sebaliknya, ini meminimalkan kesalahan karena pembulatan. Misalnya, kode berikut menghasilkan hasil 0,99999999999999999999999999999, bukan 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)

Ketika hasil pembagian dan perkalian diteruskan ke Round metode , hasilnya tidak kehilangan presisi, seperti yang ditunjukkan oleh kode berikut.

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

Angka desimal adalah nilai floating-point yang terdiri dari tanda, nilai numerik di mana setiap digit dalam nilai berkisar dari 0 hingga 9, dan faktor penskalaan yang menunjukkan posisi titik desimal mengambang yang memisahkan bagian integral dan pecahan dari nilai numerik.

Representasi biner dari nilai Decimal adalah 128-bit yang terdiri dari angka bilangan bulat 96-bit, dan sekumpulan bendera 32-bit yang mewakili hal-hal seperti faktor tanda dan penskalaan yang digunakan untuk menentukan bagian mana darinya adalah pecahan desimal. Oleh karena itu, representasi biner dari Decimal nilai formulir, (-296 hingga 296) / 10(0 hingga 28)), di mana -(296-1) sama dengan MinValue, dan 296-1 sama dengan MaxValue. Untuk informasi selengkapnya tentang representasi Decimal biner nilai dan contoh, lihat Decimal(Int32[]) konstruktor dan GetBits metode .

Faktor penskalakan juga mempertahankan nol berikutnya dalam angka Decimal . Nol berikutnya tidak memengaruhi nilai Decimal angka dalam operasi aritmatika atau perbandingan. Namun, nol berikutnya mungkin diungkapkan oleh ToString metode jika string format yang sesuai diterapkan.

Pertimbangan konversi

Jenis ini menyediakan metode yang mengonversi Decimal nilai ke dan dari SByte, , Int16, Int32, Int64Byte, UInt16, UInt32, , dan UInt64 nilai. Konversi dari jenis integral ini menjadi Decimal melebarkan konversi yang tidak pernah kehilangan informasi atau melemparkan pengecualian.

Konversi dari Decimal ke salah satu jenis integral mempersempit konversi yang membulatkan Decimal nilai ke nilai bilangan bulat terdekat menuju nol. Beberapa bahasa, seperti C#, juga mendukung konversi Decimal nilai ke Char nilai. Jika hasil konversi ini tidak dapat diwakili dalam jenis tujuan, OverflowException pengecualian akan dilemparkan.

Jenis ini Decimal juga menyediakan metode yang mengonversi Decimal nilai ke dan dari Single dan Double nilai. Konversi dari Decimal ke Single atau Double mempersempit konversi yang mungkin kehilangan presisi tetapi bukan informasi tentang besarnya nilai yang dikonversi. Konversi tidak melemparkan pengecualian.

Konversi dari Single atau Double untuk Decimal memberikan OverflowException pengecualian jika hasil konversi tidak dapat direpresentasikan sebagai Decimal.

Melakukan operasi pada nilai Desimal

Jenis ini Decimal mendukung operasi matematika standar seperti penambahan, pengurangan, pembagian, perkalian, dan negasi unary. Anda juga dapat bekerja langsung dengan representasi biner dari nilai Decimal dengan memanggil GetBits metode .

Untuk membandingkan dua Decimal nilai, Anda dapat menggunakan operator perbandingan numerik standar, atau Anda dapat memanggil CompareTo metode atau Equals .

Anda juga dapat memanggil anggota Math kelas untuk melakukan berbagai operasi numerik, termasuk mendapatkan nilai absolut angka, menentukan nilai maksimum atau minimum dari dua Decimal nilai, mendapatkan tanda angka, dan membulatkan angka.

Contoh

Contoh kode berikut menunjukkan penggunaan 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