زمانی که مشغول انجام یک پروژه بزرگ در Visual Studion .Net 2005 بودم که محاسبات پیچیده ای هم روی اعداد اعشاری داره، به یک باگ برخوردم که اینجا توضیح میدم.
یک متد به شکل زیر بنوسید:
private float a()
{
float length = 0F;
length = (float)Math.Round(Convert.ToDouble("135.4"), 4);
length *= 10.0F;
length = (float)Math.Truncate(length);
length /= 10F;
return length;
}
حالا متد ()a را در یک event اجرا کنید. مثلا در فرم خود یک button و یک textbox بگذارید و در event کلیک button کد زیر را وارد کنید:
float length = 0F;
length = a();
textBox1.Text = length.ToString();
حالا برنامه را با Ctrl-F5 اجرا کنید و روی button کلیک کنید؛ عدد 135.3 در textbox نوشته میشود! در حالی که نتیجه درست 135.4 است!
حالا برنامه را با F5 ( یعنی در حالت debug ) اجرا کنید؛ ایندفعه نتیجه 135.4 و درست است!! یعنی نتیجه اجرا در زمان debug و در زمان اجرای معمولی متفاوت است!
این کد رو اجرا کنین و نتیجه اون رو ببینید. جالب اینه که اگه همین کد رو در یک پروژه Console اجرا کنین این مشکل بوجود نمیاد!