Bagikan melalui


Jenis Data Desimal (Visual Basic)

Menahan nilai 128-bit (16-byte) yang ditandatangani yang mewakili angka bilangan bulat 96-bit (12-byte) yang diskalakan oleh pangkat variabel 10. Faktor penskalaan menentukan jumlah digit di sebelah kanan titik desimal; berkisar antara 0 hingga 28. Dengan skala 0 (tanpa tempat desimal), nilai terbesar yang mungkin adalah +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9228162514264337593543950335E+28). Dengan 28 tempat desimal, nilai terbesar adalah +/-7.9228162514264337593543950335, dan nilai terkecil bukan nol adalah +/-0.0000000000000000000000000001 (+/-1E-28).

Keterangan

Jenis data Decimal menyediakan jumlah digit signifikan terbanyak untuk angka. Ini mendukung hingga 29 digit signifikan dan dapat mewakili nilai lebih dari 7,9228 x 10^28. Sangat cocok untuk perhitungan, seperti keuangan, yang membutuhkan sejumlah besar digit tetapi tidak dapat mentolerir kesalahan pembulatan.

Nilai default dari Decimal adalah 0.

Tips Pemrograman

  • Presisi. Decimal bukan tipe data floating-point. Struktur Decimal memegang nilai bilangan bulat biner, bersama dengan bit tanda dan faktor penskalaan bilangan bulat yang menentukan bagian nilai apa yang merupakan pecahan desimal. Karena itu, angka Decimal memiliki representasi yang lebih tepat dalam memori daripada jenis titik-mengambang (Single dan Double).

  • Performa. Jenis data Decimal adalah yang paling lambat dari semua jenis numerik. Anda harus menimbang pentingnya presisi terhadap performa sebelum memilih jenis data.

  • Pelebaran. Jenis data Decimal dapat dikonversi ke Single atau Double tanpa mengalami kesalahan System.OverflowException. Namun, konversi ini dapat mengakibatkan hilangnya presisi, karena Single dan Double memprioritaskan menampung nilai yang lebih besar daripada mempertahankan presisi.

Dim decimalValue As Decimal = 1234567890123456789012345D
Dim doubleValue As Double = CDbl(decimalValue)

Console.WriteLine("Decimal value: " & decimalValue)
Console.WriteLine("Double value: " & doubleValue)

Output contoh sebelumnya menunjukkan bahwa nilai desimal mempertahankan presisi penuh, sementara nilai Double kehilangan presisi karena batasan jenis data Double.

 Decimal value: 1234567890123456789012345
 Double value: 1.23456789012346E+24
  • Nol Kelebihan. Visual Basic tidak menyimpan nol kelebihan dalam harfiah Decimal. Namun, variabel Decimal mempertahankan nol kelebian apa pun yang diperoleh secara komputasi. Contoh berikut mengilustrasikan langkah-langkah ini:

    Dim d1, d2, d3, d4 As Decimal
    d1 = 2.375D
    d2 = 1.625D
    d3 = d1 + d2
    d4 = 4.000D
    MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) &
          ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))
    

    Output MsgBox dalam contoh sebelumnya adalah sebagai berikut:

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Ketik Karakter. Menambahkan karakter D jenis harfiah ke harfiah memaksanya ke jenis data Decimal. Menambahkan karakter jenis pengidentifikasi @ ke pengidentifikasi mana pun akan memaksanya ke jenis data Decimal.

  • Jenis Kerangka. Jenis yang sesuai dalam .NET Framework adalah struktur System.Decimal.

Rentang

Anda mungkin perlu menggunakan karakter jenis D untuk menetapkan nilai besar ke variabel Decimal atau konstanta. Persyaratan ini karena kompiler menafsirkan harfiah sebagai Long kecuali karakter jenis harfiah mengikuti harfiah, seperti yang ditunjukkan contoh berikut.

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

Deklarasi untuk bigDec1 tidak menghasilkan luapan karena nilai yang ditetapkan padanya jatuh dalam rentang untuk Long. Nilai Long ditetapkan ke variabel Decimal.

Deklarasi untuk bigDec2 menghasilkan kesalahan luapan karena nilai yang ditetapkan ke dalamnya terlalu besar untuk Long. Karena harfiah numerik tidak dapat ditafsirkan terlebih dahulu sebagai Long, itu tidak dapat ditetapkan ke variabel Decimal.

Untuk bigDec3, karakter jenis harfiah D memecahkan masalah dengan memaksa kompiler untuk menafsirkan harfiah sebagai Decimal alih-alih sebagai Long.

Lihat juga