Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
C# menyediakan satu set jenis numerik integral dan floating-point . Ada konversi antara dua jenis numerik, baik implisit atau eksplisit. Anda harus menggunakan ekspresi cast untuk melakukan konversi eksplisit.
Konversi numerik implisit
Tabel berikut menunjukkan konversi implisit yang telah ditentukan sebelumnya antara jenis numerik bawaan:
| Dari | Untuk |
|---|---|
| sbyte |
short, , intlong, float, double, decimal, , ataunint |
| byte |
short, , ushortint, uint, long, ulong, float, double, decimal, , nint, ataunuint |
| pendek |
int, , longfloat, double, atau decimal, atau , ataunint |
int, , longuint, ulong, float, double, atau decimal, nint, atau , ataunuint |
|
| int |
long, , floatdouble, atau decimal,nint |
| uint |
long, , ulongfloat, double, atau decimal, atau , ataunuint |
| long |
float, double, atau decimal |
| ulong |
float, double, atau decimal |
| float | double |
| nint |
long, float, double, atau decimal |
| nuint |
ulong, float, double, atau decimal |
Nota
Konversi implisit dari int, , uintlong, , ulong, nintatau nuint ke float dan dari long, ulong, nint, atau nuint dapat double menyebabkan hilangnya presisi, tetapi tidak pernah kehilangan urutan besarnya. Konversi numerik implisit lainnya belum pernah kehilangan informasi apa pun.
Perhatikan juga bahwa
Jenis numerik integral secara implisit dapat dikonversi ke jenis numerik floating-point apa pun.
Tidak ada konversi implisit ke
bytejenis dansbyte. Tidak ada konversi implisit daridoublejenis dandecimal.Tidak ada konversi implisit antara
decimaljenis danfloatjenis ataudouble.Nilai ekspresi konstan jenis
int(misalnya, nilai yang diwakili oleh bilangan bulat harfiah) dapat dikonversi secara implisit kesbyte, ,byte,ushortshort,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 contoh sebelumnya, jika nilai konstanta tidak berada dalam rentang jenis tujuan, kesalahan pengkompilasi CS0031 terjadi.
Konversi numerik eksplisit
Tabel berikut 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 |
sbyte, byte, atau short |
|
| int |
sbyte, , byteshort, ushort, uint, ulong, , ataunuint |
| 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, , byteshort, ushort, int, uint, long, ulong, decimal, , nint, ataunuint |
| ganda |
sbyte, , byte, ushortshort, int, uint, long, ulong, float, , decimal, nint, ataunuint |
| desimal |
sbyte, , byte, ushortshort, int, uint, long, ulong, float, , double, nint, ataunuint |
| nint |
sbyte, , byteshort, ushort, int, uint, ulong, , ataunuint |
| nuint |
sbyte, , byteshort, ushort, int, uint, long, , ataunint |
Nota
Konversi numerik eksplisit dapat 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 dicentang, konversi berhasil jika nilai sumber berada dalam rentang jenis tujuan. Jika tidak, maka akan menghasilkan kesalahan OverflowException. Dalam konteks yang tidak dicentang, konversi selalu berhasil, dan berlanjut sebagai berikut:
Jika jenis sumber lebih besar dari jenis tujuan, maka nilai sumber dipotong dengan membuang bit "ekstra" yang paling signifikan. Hasilnya kemudian diperlakukan sebagai nilai dari jenis tujuannya.
Jika jenis sumber lebih kecil dari jenis tujuan, maka nilai sumber tersebut diperpanjang tanda atau diperpanjang dengan nol agar berukuran sama dengan jenis tujuan. Ekstensi tanda tangan digunakan jika jenis sumber ditandatangani; zero-extension digunakan jika jenis sumber tidak ditandatangani. Hasilnya kemudian diperlakukan sebagai nilai dari jenis tujuannya.
Jika jenis sumber berukuran sama dengan jenis tujuan, maka nilai sumber diperlakukan sebagai nilai dari jenis tujuan.
Saat Anda mengonversi
decimalnilai menjadi jenis integral, nilai ini dibulatkan ke nol ke nilai integral terdekat. Jika nilai integral yang dihasilkan berada di luar rentang jenis tujuan, nilai OverflowException akan dilemparkan.Saat Anda mengonversi
doublenilai ataufloatmenjadi jenis integral, nilai ini dibulatkan ke nol ke nilai integral terdekat. Jika nilai integral yang dihasilkan berada di luar rentang jenis tujuan, hasilnya tergantung pada konteks pemeriksaan luapan. Dalam konteks yang dicentang, dilemparkan OverflowException , sementara dalam konteks yang tidak dicentang, hasilnya adalah nilai yang tidak ditentukan dari jenis tujuan.Saat Anda mengonversi
doublekefloat, nilai dibulatkandoubleke nilai terdekatfloat.doubleJika nilainya terlalu kecil atau terlalu besar agar sesuai dengan jenisnyafloat, hasilnya adalah nol atau tak terbatas.Saat Anda mengonversi
floatataudoublemenjadidecimal, nilai sumber dikonversi kedecimalrepresentasi dan dibulatkan ke angka terdekat setelah tempat desimal ke-28 jika perlu. Bergantung pada nilai nilai sumber, salah satu hasil berikut dapat terjadi:Jika nilai sumber terlalu kecil untuk direpresentasikan sebagai
decimal, hasilnya menjadi nol.Jika nilai sumber adalah NaN (bukan angka), tak terbatas, atau terlalu besar untuk direpresentasikan sebagai
decimal, maka OverflowException akan dilemparkan.
Saat Anda mengonversi
decimalkefloatataudouble, nilai sumber masing-masing dibulatkan ke nilai ataudoubleterdekatfloat.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#: