نوع float یک نام مستعار در C# برای نوع System.Single و double یک نام مستعار C# برای نوع System.Double که هر دو انواع نقطه باینری شناور (floating binary point) هستند. float 32 بیتی است و double 64 بیتی است. بهعبارتدیگر، آنها عددی مانند زیر را نشان میدهند:
10001.10010110011
عدد باینری و مکان نقطه باینری هر دو در داخل مقدار کدگذاری میشوند.
نوع decimal یک نام مستعار در C# برای نوع System.Decimal است که یک نوع ممیز اعشاری شناور (floating decimal point) است. بهعبارتدیگر، آنها عددی مانند زیر را نشان میدهند:
12345.65789
مجدداً، تعداد و مکان نقطه اعشار هر دو در داخل مقدار کدگذاری میشوند - این چیزی است که باعث میشود اعشار همچنان یک نوع ممیز شناور بهجای نوع نقطه ثابت باشد.
نکته مهمی که باید به آن توجه داشت این است که انسانها عادت دارند اعداد غیر صحیح را بهصورت اعشاری نشان دهند و انتظار نتایج دقیق را در نمایش اعشاری دارند. همه اعداد اعشاری دقیقاً در ممیز شناور باینری قابلنمایش نیستند - برای مثال 0.1 - بنابراین اگر از مقدار ممیز شناور باینری استفاده کنید، درواقع تقریبی به 0.1 خواهید داشت. هنگام استفاده از یک ممیز اعشاری شناور نیز همچنان تقریبی دریافت خواهید کرد - برای مثال، نتیجه تقسیم 1 بر 3 را نمیتوان دقیقاً نشان داد.
در مورد اینکه چه زمانی باید استفاده کرد:
برای مقادیری که "بهطور طبیعی اعشاری دقیق" هستند، خوب است از decimal استفاده کنید. این معمولاً برای هر مفهومی که توسط انسان اختراعشده است مناسب است: ارزشهای مالی بارزترین مثال هستند، اما موارد دیگری نیز وجود دارند. برای مثال امتیازی که به غواصان یا اسکیتبازان داده میشود را در نظر بگیرید.
برای مقادیری که بیشتر مصنوعات طبیعت هستند و نمیتوان آنها را دقیقاً اندازهگیری کرد، float/double مناسبتر است. بهعنوانمثال، دادههای علمی معمولاً به این شکل نشان داده میشوند. در اینجا، مقادیر اصلی برای شروع «ازلحاظ اعشاری دقیق» نخواهند بود، بنابراین حفظ «دقت اعشاری» برای نتایج مورد انتظار مهم نیست. کار با انواع نقطه باینری شناور بسیار سریعتر از decimal است.