Jenis numerik poin mengambang (referensi C#)

Jenis numerik poin mengambang mewakili angka riil. Semua jenis numerik poin mengambang adalah jenis nilai. Poin mengambang juga jenis sederhana dan dapat diinisialisasi dengan harfiah. Semua jenis numerik poin mengambang mendukung operator aritmatika, perbandingan, dan kesetaraan.

Karakteristik jenis poin mengambang

C# mendukung jenis poin mengambang yang telah ditentukan sebelumnya berikut:

Jenis/kata kunci C# Rentang perkiraan Presisi Ukuran Jenis .NET
float ±1,5 x 10−45 hingga ±3,4 x 1038 6-9 digit 4 byte System.Single
double ±5.0 × 10−324 hingga ±1,7 × 10308 ~15-17 digit 8 byte System.Double
decimal ±1,0 x 10-28 hingga ±7,9228 x 1028 28-29 digit 16 byte System.Decimal

Dalam tabel sebelumnya, setiap kata kunci jenis C# dari kolom paling kiri adalah alias untuk jenis .NET yang sesuai. Mereka dapat dipertukarkan. Misalnya, deklarasi berikut mendeklarasikan variabel dengan jenis yang sama:

double a = 12.3;
System.Double b = 12.3;

Nilai default dari setiap jenis floating-point adalah nol, 0. Masing-masing jenis poin mengambang memiliki konstanta MinValue dan MaxValue yang memberikan nilai terbatas minimum dan maksimum dari jenis tersebut. Jenis float dan double juga menyediakan konstanta yang mewakili nilai bukan angka dan tak terbatas. Misalnya, jenis double menyediakan konstanta berikut: Double.NaN, Double.NegativeInfinity, dan Double.PositiveInfinity.

Jenis decimal ini sesuai ketika tingkat presisi yang diperlukan ditentukan oleh jumlah digit di sebelah kanan titik desimal. Angka-angka tersebut biasanya digunakan dalam aplikasi keuangan, untuk jumlah mata uang (misalnya, $1,00), suku bunga (misalnya, 2,625%), dan sebagainya. Bahkan angka yang tepat hanya satu digit desimal ditangani lebih akurat oleh jenis decimal: 0,1, misalnya, dapat diwakili dengan tepat oleh instans decimal, sementara tidak ada instans double atau float yang persis mewakili 0,1. Karena perbedaan jenis numerik ini, kesalahan pembulatan tak terduga dapat terjadi dalam perhitungan aritmatika saat Anda menggunakan double atau float untuk data desimal. Anda dapat menggunakan double alih-alih decimal saat mengoptimalkan performa lebih penting daripada memastikan akurasi. Tetapi, perbedaan performa tidak akan diperhatikan oleh semua aplikasi kecuali aplikasi yang paling intensif perhitungan. Kemungkinan alasan lain yang perlu dihindari decimal adalah meminimalkan persyaratan penyimpanan. Misalnya, ML.NET menggunakan float karena perbedaan antara 4 byte dan 16 byte ditambahkan untuk himpunan data yang sangat besar. Untuk informasi selengkapnya, lihat System.Decimal .

Anda dapat mencampur jenis integral dan jenis float dan double dalam ekspresi. Dalam hal ini, jenis integral secara implisit dikonversi ke salah satu jenis floating-point dan, jika perlu, jenis float secara implisit dikonversi ke double. Ekspresi dievaluasi sebagai berikut:

  • Jika ada jenis double dalam ekspresi, ekspresi mengevaluasi ke double, atau ke bool dalam perbandingan relasional dan kesetaraan.
  • Jika tidak ada jenis double dalam ekspresi, ekspresi mengevaluasi ke float, atau ke bool dalam perbandingan relasional dan kesetaraan.

Anda juga dapat mencampur jenis integral dan jenis decimal dalam ekspresi. Dalam hal ini, jenis integral secara implisit dikonversi ke jenis decimal dan ekspresi mengevaluasi ke decimal, atau ke bool dalam perbandingan relasional dan kesetaraan.

Anda tidak dapat mencampur jenis decimal dengan jenis float dan double dalam ekspresi. Dalam hal ini, jika Anda ingin melakukan operasi aritmatika, perbandingan, atau kesetaraan, Anda harus secara eksplisit mengonversi operan baik dari atau ke jenis decimal, seperti yang ditunjukkan contoh berikut:

double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);

Anda dapat menggunakan string format numerik standar atau string format numerik kustom untuk memformat nilai poin mengambang.

Harfiah yang nyata

Jenis harfiah nyata ditentukan oleh akhirannya sebagai berikut:

  • Harfiah tanpa akhiran atau dengan akhiran d atau D berjenis double
  • Harfiah dengan akhiran f atau F berjenis float
  • Harfiah dengan akhiran m atau M berjenis decimal

Kode berikut menunjukkan contoh masing-masing:

double d = 3D;
d = 4d;
d = 3.934_001;

float f = 3_000.5F;
f = 5.4f;

decimal myMoney = 3_000.5m;
myMoney = 400.75M;

Contoh sebelumnya juga menunjukkan penggunaan _ sebagai pemisah digit. Anda dapat menggunakan pemisah digit dengan semua jenis harfiah numerik.

Anda juga dapat menggunakan notasi ilmiah, yaitu, menentukan bagian eksponen dari harfiah nyata, seperti yang ditunjukkan contoh berikut:

double d = 0.42e2;
Console.WriteLine(d);  // output 42

float f = 134.45E-2f;
Console.WriteLine(f);  // output: 1.3445

decimal m = 1.5E6m;
Console.WriteLine(m);  // output: 1500000

Konversi

Hanya ada satu konversi implisit antara jenis numerik poin mengambang: dari float ke double. Tetapi Anda dapat mengonversi jenis poin mengambang apa pun ke jenis poin mengambang lainnya dengan transmisikan secara eksplisit. Untuk informasi selengkapnya, lihat Konversi numerik bawaan.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:

Lihat juga