کلیدواژه decimal به یک نوع داده ای 128-بیتی اشاره دارد. در مقایسه با نوع های ممیز-شناور، نوع decimal دقت بیشتر و محدوده کمتری دارد، که آنرا برای محاسبات مالی و پولی مناسب کرده است.
محدوده تقریبی و دقت نوع decimal در زیر آمده است:
- نوع: decimal
- محدوده تقریبی:
(-7.9 x 1028 to 7.9 x 1028) / (100 to 28)
- دقت: 29-28 رقم معنادار
- نوع دات نتی: System.Decimal
لیترال ها
اگر شما می خواهید یک لیترال عددی حقیقی داشته باشید که با آن مانند decimal رفتار شود، از پسوند m یا M استفاده کنید، برای مثال:
decimal myMoney = 300.5m;
بدون پسوند m ، با عدد مانند double رفتار شده و تولید یک خطای کامپایل می نماید.
تبدیلات
نوع های صحیح بصورت ضمنی به نوع decimal تبدیل شده و نتیجه به decimal ارزیابی می شود. از اینرو مانند مثال زیر شما می توانید یک متغیر decimal را بدون نیاز به پسوند، با استفاده از یک لیترال صحیح مقداردهی اولیه کنید:
decimal myMoney = 300;
هیچ تبدیل ضمنی ای بین نوع های ممیز-شناور و نوع decimal وجود ندارد؛ بنابراین برای تبدیل بین این دو نوع باید از عملگر قالب ریزی استفاده شود. مانند مثال:
decimal myMoney = 99.9m; double x = (double)myMoney; myMoney = (decimal)x;
شما همچنین می توانید نوع های عددی صحیح و نوع decimal را در یک عبارت یکسان با یکدیگر ترکیب کنید. هرچند، ترکیب decimal و نوع های ممیز-شناور، بدون قالبریزی باعث خطای کامپایل می شود.
برای اطلاعات بیشتر در مورد تبدیلات عددی ضمنی به جدول تبدیلات عددی ضمنی ، مراجعه فرمائید.
برای اطلاعات بیشتر در مورد تبدیلات عددی صریح به "جدول تبدیلات عددی صریح" ، مراجعه فرمائید.
قالب بندی خروجی decimal
شما می توانید نتایج حاصل را با متد String.Format ، یا بوسیله متد Console.Write ، که System.Format() را فراخوانی می کند قالب بندی کنید.همانطور که بعدا در مثال دوم همین مقاله خواهید دید، قالب بندی پول رایج بوسیله رشته قالب بندی استاندارد "c" یا "C" تعیین می شود.
مثال
در این مثال، یک decimal و int در یک عبارت یکسان با یکدیگر ترکیب شده اند. نتیجه به نوع decimal ارزیابی می شود. مثال زیر از بیانی استفاده می کند که سعی در جمع کردن متغیرهای double و decimal دارد:
double x = 9; Console.WriteLine(d + x); // Error
نتیجه ، خطای زیر است:
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
public class TestDecimal { static void Main() { decimal d = 9.1m; int y = 3; Console.WriteLine(d + y); // Result converted to decimal } } // Output: 12.1
در این مثال، خروجی با استفاده از رشته قالب بندی پول رایج، قالب بندی شده است. دقت کنید که x به دلیل تجاوز محل ممیز از 0.99$ ، گرد شده است. متغیر y که حداکثر دقت رقمی را نشان می دهد، در قالب درست به نمایش در آمده است.
public class TestDecimalFormat { static void Main() { decimal x = 0.999m; decimal y = 9999999999999999999999999999m; Console.WriteLine("My amount = {0:C}", x); Console.WriteLine("Your amount = {0:C}", y); } } /* Output: My amount = $1.00 Your amount = $9,999,999,999,999,999,999,999,999,999.00 */