Pertanyaan Perbedaan antara desimal, float dan double in .NET?


Apa perbedaan antara decimal, float dan double di .NET?

Kapan seseorang akan menggunakan salah satunya?


1772
2018-03-06 11:31


asal


Jawaban:


float dan double adalah mengambang biner jenis titik. Dengan kata lain, mereka mewakili angka seperti ini:

10001.10010110011

Nomor biner dan lokasi titik biner keduanya dikodekan dalam nilai.

decimal adalah mengambang desimal jenis titik. Dengan kata lain, mereka mewakili angka seperti ini:

12345.65789

Sekali lagi, nomor dan lokasi desimal titik keduanya dikodekan dalam nilai - itulah yang membuat decimal masih merupakan tipe floating point daripada tipe fixed point.

Yang penting untuk dicatat adalah bahwa manusia digunakan untuk mewakili non-bilangan bulat dalam bentuk desimal, dan mengharapkan hasil yang tepat dalam representasi desimal; tidak semua angka desimal benar-benar dapat diwakili dalam floating point biner - 0,1, misalnya - jadi jika Anda menggunakan nilai titik mengambang biner Anda akan benar-benar mendapatkan perkiraan ke 0,1. Anda masih akan mendapatkan perkiraan ketika menggunakan titik desimal mengambang juga - hasil dari membagi 1 oleh 3 tidak dapat benar-benar diwakili, misalnya.

Adapun apa yang harus digunakan saat:

  • Untuk nilai-nilai yang "desimal alami persis" itu baik untuk digunakan decimal. Ini biasanya cocok untuk setiap konsep yang diciptakan oleh manusia: nilai finansial adalah contoh yang paling jelas, tetapi ada juga yang lain. Pertimbangkan skor yang diberikan kepada penyelam atau peseluncur es, misalnya.

  • Untuk nilai-nilai yang lebih artefak alam yang tidak bisa benar-benar diukur persis bagaimanapun, float/double lebih tepat. Sebagai contoh, data ilmiah biasanya akan diwakili dalam formulir ini. Di sini, nilai-nilai asli tidak akan "akurat secara desimal" untuk memulai, sehingga tidak penting bagi hasil yang diharapkan untuk mempertahankan "akurasi desimal". Jenis titik biner mengambang jauh lebih cepat bekerja daripada desimal.


1963
2018-03-06 11:56



Presisi adalah perbedaan utama.

Mengapung - 7 digit (32 bit)

Dua kali lipat-15-16 digit (64 bit)

Desimal -28-29 angka signifikan (128 bit)

Desimal memiliki presisi yang jauh lebih tinggi dan biasanya digunakan dalam aplikasi keuangan yang memerlukan tingkat akurasi yang tinggi. Desimal jauh lebih lambat (hingga 20 kali lipat dalam beberapa tes) daripada double / float.

Desimal dan Float / Doubles tidak dapat dibandingkan tanpa cast sedangkan Floats dan Doubles bisa. Desimal juga memungkinkan pengkodean atau nol trailing.

float flt = 1F/3;
double dbl = 1D/3;
decimal dcm = 1M/3;
Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);

Hasil:

float: 0.3333333  
double: 0.333333333333333  
decimal: 0.3333333333333333333333333333

894
2018-03-06 11:33



Struktur Desimal sangat disesuaikan dengan perhitungan keuangan yang membutuhkan akurasi, yang relatif tidak toleran terhadap pembulatan. Desimal tidak cukup untuk aplikasi ilmiah, karena beberapa alasan:

  • Kehilangan presisi tertentu dapat diterima dalam banyak perhitungan ilmiah karena batasan praktis dari masalah fisik atau artefak yang diukur. Kehilangan presisi tidak dapat diterima di bidang keuangan.
  • Desimal jauh (jauh) lebih lambat dari pelampung dan ganda untuk sebagian besar operasi, terutama karena operasi floating point dilakukan dalam biner, sedangkan hal Desimal dilakukan dalam basis 10 (yaitu pelampung dan ganda ditangani oleh perangkat keras FPU, seperti MMX / SSE , sedangkan desimal dihitung dalam perangkat lunak).
  • Desimal memiliki rentang nilai yang sangat kecil dari dua kali lipat, meskipun fakta itu mendukung lebih banyak digit ketepatan. Oleh karena itu, Desimal tidak dapat digunakan untuk mewakili banyak nilai ilmiah.

65
2018-04-13 13:55



enter image description here

untuk informasi lebih lanjut Anda bisa pergi ke sumber gambar ini:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/921a8ffc-9829-4145-bdc9-a96c1ec174a5


54
2018-06-07 12:50



float 7 digit presisi

double memiliki sekitar 15 digit presisi

decimal memiliki sekitar 28 digit ketepatan

Jika Anda membutuhkan akurasi yang lebih baik, gunakan gandeng, bukan melayang. Dalam CPU modern, kedua tipe data memiliki kinerja yang hampir sama. Satu-satunya manfaat menggunakan float adalah mereka mengambil lebih sedikit ruang. Praktis penting hanya jika Anda punya banyak dari mereka.

Saya menemukan ini menarik. Apa yang Setiap Ilmuwan Komputer Harus Ketahui Tentang Aritmatika Titik-Mengambang


39
2017-08-29 00:06



Tidak ada yang menyebutkan itu

Dalam pengaturan default, Floats (System.Single) dan doubles (System.Double) tidak akan pernah digunakan   overflow checking sementara Decimal (System.Decimal) akan selalu digunakan   pemeriksaan melimpah.

maksudku

decimal myNumber = decimal.MaxValue;
myNumber += 1;

melempar OverflowException.

Tetapi ini tidak:

float myNumber = float.MaxValue;
myNumber += 1;

&

double myNumber = double.MaxValue;
myNumber += 1;

28
2018-01-02 13:12



  1. Double dan float dapat dibagi dengan nol integer tanpa kecuali pada waktu kompilasi dan run.
  2. Desimal tidak dapat dibagi dengan nol bilangan bulat. Kompilasi akan selalu gagal jika Anda melakukannya.

24
2017-07-29 07:21