Bagikan melalui


Jenis numerik titik mengambang (referensi C#)

Jenis numerik floating-point mewakili angka riil. Semua jenis numerik floating-point adalah jenis nilai. Mereka juga jenis sederhana dan dapat diinisialisasi dengan literal. Semua jenis numerik floating-point mendukung operator aritmatika, perbandingan, dan kesetaraan .

Karakteristik jenis floating-point

C# mendukung jenis floating-point yang telah ditentukan sebelumnya berikut:

Jenis/kata kunci C# Perkiraan rentang 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 floating-point memiliki MinValue konstanta dan MaxValue yang memberikan nilai minimum dan maksimum terbatas dari jenis tersebut. Jenis float dan double juga menyediakan konstanta yang mewakili nilai bukan angka dan tak terbatas. Misalnya, jenis menyediakan double konstanta berikut: Double.NaN, , Double.NegativeInfinitydan Double.PositiveInfinity.

Jenis decimal ini sesuai ketika tingkat presisi yang diperlukan ditentukan oleh jumlah digit di sebelah kanan titik desimal. Angka-angka tersebut umumnya 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 decimal jenis: 0,1, misalnya, dapat diwakili dengan tepat oleh decimal instans, sementara tidak double ada atau float instans yang persis mewakili 0,1. Karena perbedaan ini dalam jenis numerik, kesalahan pembulatan yang tidak 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. Namun, perbedaan performa apa pun akan lugas kecuali aplikasi yang paling intensif perhitungan. Alasan lain yang mungkin 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 float jenis dan double dalam ekspresi. Dalam hal ini, jenis integral secara implisit dikonversi ke salah satu jenis floating-point dan, jika perlu, jenisnya float secara implisit dikonversi ke double. Ekspresi dievaluasi sebagai berikut:

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

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

Anda tidak dapat mencampur decimal tipe dengan float tipe dan double dalam ekspresi. Dalam hal ini, jika Anda ingin melakukan operasi aritmetika, perbandingan, atau kesetaraan, Anda harus secara eksplisit mengonversi operand baik dari atau ke decimal jenis, 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 titik mengambang.

Harfiah yang nyata

Jenis literal nyata ditentukan oleh akhirannya sebagai berikut:

  • Literal tanpa akhiran atau dengan akhiran d atau D berjenis double
  • Literal dengan akhiran f atau F berjenis float
  • Literal 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 literal numerik.

Anda juga dapat menggunakan notasi ilmiah, yaitu, menentukan bagian eksponen dari literal 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 floating-point: dari float ke double. Namun, Anda dapat mengonversi jenis floating-point apa pun ke jenis floating-point lainnya dengan cast eksplisit. Untuk informasi selengkapnya, lihat Konversi numerik bawaan.

Spesifikasi bahasa C#

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

Lihat juga