Konversi numerik bawaan (referensi C#)
C# menyediakan satu set jenis numerik integral dan floating-point. Terdapat konversi antara dua jenis numerik, baik implisit atau eksplisit. Anda harus menggunakan ekspresi transmisi untuk bisa melakukan konversi eksplisit.
Konversi numerik implisit
Tabel berikut ini menunjukkan konversi implisit yang telah ditentukan sebelumnya antara jenis numerik bawaan:
Dari | Untuk |
---|---|
sbyte | short , int , long , float , double , decimal , atau nint |
byte | short , ushort , int , uint , long , ulong , float , double , decimal , nint , atau nuint |
pendek | int , long , float , double , atau decimal , atau nint |
ushort | int , uint , long , ulong , float , double , atau decimal , nint , atau nuint |
int | long , float , double , atau decimal , nint |
uint | long , ulong , float , double , atau decimal , atau nuint |
long | float , double , atau decimal |
ulong | float , double , atau decimal |
float | double |
nint | long , float , double , atau decimal |
nuint | ulong , float , double , atau decimal |
Catatan
Konversi implisit dari int
, uint
, long
, ulong
, nint
, atau nuint
ke float
dan dari long
, ulong
, nint
, atau nuint
ke double
dapat menyebabkan hilangnya presisi, tetapi tidak pernah kehilangan urutan besarnya. Konversi numerik implisit lainnya belum pernah kehilangan informasi apa pun.
Juga perhatikan bahwa
Setiap jenis numerik integral, secara implisit dapat dikonversi ke jenis numerik floating-point apa pun.
Tidak ada konversi implisit ke jenis
byte
dansbyte
. Tidak ada konversi implisit dari jenisdouble
dandecimal
.Tidak ada konversi implisit antara jenis
decimal
danfloat
jenis ataudouble
.Nilai ekspresi konstan jenis
int
(misalnya, nilai yang diwakili oleh literal bilangan bulat) dapat dikonversi secara implisit kesbyte
,byte
,short
,ushort
,uint
,ulong
,nint
, ataunuint
, jika berada dalam rentang jenis tujuan:byte a = 13; byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Seperti yang ditunjukkan oleh contoh sebelumnya, jika nilai konstanta tidak berada dalam rentang jenis tujuan, kesalahan penyusun CS0031 terjadi.
Konversi numerik eksplisit
Tabel berikut ini menunjukkan konversi eksplisit yang telah ditentukan sebelumnya antara jenis numerik bawaan yang tidak ada konversi implisit:
Dari | Untuk |
---|---|
sbyte | byte , ushort , uint , ulong , atau nuint |
byte | sbyte |
pendek | sbyte , byte , ushort , uint , ulong , atau nuint |
ushort | sbyte , byte , atau short |
int | sbyte , byte , short , ushort , uint , ulong , atau nuint |
uint | sbyte , byte , short , ushort , int , atau nint |
long | sbyte , byte , short , ushort , int , uint , ulong , nint , atau nuint |
ulong | sbyte , byte , short , ushort , int , uint , long , nint , atau nuint |
float | sbyte , byte , short , ushort , int , uint , long , ulong , decimal , nint , atau nuint |
Double | sbyte , byte , short , ushort , int , uint , long , ulong , float , decimal , nint , atau nuint |
desimal | sbyte , byte , short , ushort , int , uint , long , ulong , float , double , nint , atau nuint |
nint | sbyte , byte , short , ushort , int , uint , ulong , atau nuint |
nuint | sbyte , byte , short , ushort , int , uint , long , atau nint |
Catatan
Konversi numerik eksplisit bisa mengakibatkan kehilangan data atau melemparkan pengecualian, biasanya OverflowException.
Perhatikan juga bahwa:
Saat Anda mengonversi nilai jenis integral ke jenis integral lain, hasilnya tergantung pada konteks pemeriksaan luapan. Dalam konteks yang tercentang, konversi berhasil jika nilai sumber berada dalam rentang jenis tujuan. Jika tidak, OverflowException akan muncul. Dalam konteks yang tidak tercentang, konversi selalu berhasil, dan berlanjut sebagai berikut:
Jika jenis sumber lebih besar dari jenis tujuan, maka nilai sumber dipotong dengan membuang bit berlebih yang paling signifikan. Hasilnya kemudian diperlakukan sebagai nilai dari jenis tujuannya.
Jika jenis sumber lebih kecil dari jenis tujuan, maka nilai sumber akan diperpanjang atau diperpanjang nol sehingga berukuran sama dengan jenis tujuan. Ekstensi tanda tangan digunakan jika jenis sumber ditandatangani; ekstensi nol digunakan jika jenis sumber tidak harus ditandatangani. Hasilnya kemudian diperlakukan sebagai nilai dari jenis tujuannya.
Jika jenis sumber berukuran sama dengan jenis tujuan, maka nilai sumber akan diperlakukan sebagai nilai dari jenis tujuan.
Saat Anda mengonversi nilai
decimal
menjadi jenis integral, nilai ini dibulatkan ke nol ke nilai integral terdekat. Jika nilai integral yang dihasilkan berada di luar rentang jenis tujuan maka OverflowException akan dilemparkan.Saat Anda mengonversi nilai
double
ataufloat
ke tipe integral, nilai ini dibulatkan menuju nol ke nilai integral terdekat. Jika nilai integral yang dihasilkan berada di luar rentang jenis tujuan, hasilnya tergantung pada konteks pemeriksaan luapan. Di dalam konteks yang dicentang, OverflowException dilemparkan, sementara dalam konteks yang tidak dicentang, hasilnya adalah nilai yang tidak ditentukan dari jenis tujuan.Saat Anda mengonversi
double
kefloat
, nilai dibulatkandouble
ke nilai terdekatfloat
.double
Jika nilainya terlalu kecil atau terlalu besar agar pasfloat
dengan jenisnya, hasilnya adalah nol atau tak terbatas.Saat Anda mengonversi
float
ataudouble
menjadidecimal
, nilai sumber dikonversi kedecimal
representasi dan dibulatkan ke angka terdekat setelah tempat desimal ke-28 jika perlu. Tergantung pada nilai sumber, salah satu hasil berikut dapat terjadi:Jika nilai sumber terlalu kecil untuk direpresentasikan sebagai
decimal
, hasilnya akan menjadi nol.Jika nilai sumber adalah NaN (bukan sebuah angka), tak terbatas, atau terlalu besar untuk direpresentasikan sebagai
decimal
, akan OverflowException dilemparkan.
Saat Anda mengonversi
decimal
kefloat
ataudouble
, nilai sumber masing-masing dibulatkan ke nilaifloat
ataudouble
terdekat.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk