مشکل این کد محاسباتیم چیه ؟
سلام
این قطعه کد زمان ورود و خروج خودرو بهش میدم و محاسبات هزینه ای توقف در پارکینگو انجام میده
فقط نمیدونم چرا وقتی totalHours بیشتر از 85 میشه هزینرو 0 نشون میده
این قسمت زمان توقف در پارکینگ رو محاسبه میکنه :
TimeSpan dif = outTime - inTime;
float totalHours = float.Parse(dif.TotalHours.ToString());
primaryTime و primaryPrice متغیرهایی هستن که زمان اولیه و هزینه اولیه را نگهداری میکنن مثلا 2 ساعت اول 1000 تومن
secTime و secPrice هم زمان و مبلغ اضافی رو نگهداری میکنه . مثلا بعد از 2 ساعت اول هر 1 ساعت اضافی 500 تومن
اینم کد محاسباتم :
long finalPrice = 0;
float secHours = totalHours - primaryTime;
if (totalHours < primaryTime || totalHours == primaryTime)
finalPrice = primaryPrice;
else if (totalHours > primaryTime)
{
int temp = Convert.ToInt32(secHours / secTime);
if (float.Parse(temp.ToString()) < (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice + secPrice;
else if (float.Parse(temp.ToString()) == (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice;
}
چرا وقتی totalHours از 85 بیشتر میشه finalPrice صفر میشه ؟؟؟؟
نقل قول: مشکل این کد محاسباتیم چیه ؟
یه خورده کدهات گنگه
برنامتو بذار(همین یه تیکشو) تا اجرا کنیم و بفهمیم چی به چیه؟
1 ضمیمه
نقل قول: مشکل این کد محاسباتیم چیه ؟
نقل قول: مشکل این کد محاسباتیم چیه ؟
خب ببین دوست من وقتی از
if (float.Parse(temp.ToString()) < (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice + secPrice;
else if (float.Parse(temp.ToString()) == (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice;
استفاده میکنی باید حواستو جمع کنی که همه ی شرایط را در بر بگیری تا این اتفاق نیوفته
اگر عدد 85 را دستی وارد کنی توی این کد و تریس کنی خواهی دید که finalPrice نه در if اول و نه در دومی محاسبه نمیشه چون اصلا شرطش را دارا نیست
این مورد فقط برای 85 نیست و اگر شما 4 - 16 - 25 - 34 - 46 و ... را هم بذاری باز جواب صفر میشه چون هیچ وقت داخل هیچ کدوم ازین if ها نمیفته
راه حل
درین جور موارد سعی کن همیشه یه else ، آخره شرطت بذاری که اگر هیچکدوم اجرا نشد این else آخری اجرا بشه
مثل این
if (float.Parse(temp.ToString()) < (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice + secPrice;
else if (float.Parse(temp.ToString()) == (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice;
else
finalPrice = temp * secPrice + primaryPrice;
نقل قول: مشکل این کد محاسباتیم چیه ؟
یه نکته مهم دیگه اینکه تشکر یادت نره
نقل قول: مشکل این کد محاسباتیم چیه ؟
نقل قول:
نوشته شده توسط
zayens
خب ببین دوست من وقتی از
if (float.Parse(temp.ToString()) < (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice + secPrice;
else if (float.Parse(temp.ToString()) == (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice;
استفاده میکنی باید حواستو جمع کنی که همه ی شرایط را در بر بگیری تا این اتفاق نیوفته
اگر عدد 85 را دستی وارد کنی توی این کد و تریس کنی خواهی دید که finalPrice نه در if اول و نه در دومی محاسبه نمیشه چون
اصلا شرطش را دارا نیست
این مورد فقط برای 85 نیست و اگر شما 4 - 16 - 25 - 34 - 46 و ... را هم بذاری باز جواب صفر میشه چون هیچ وقت داخل هیچ کدوم ازین if ها نمیفته
راه حل
درین جور موارد سعی کن همیشه یه else ، آخره شرطت بذاری که اگر هیچکدوم اجرا نشد این else آخری اجرا بشه
مثل این
if (float.Parse(temp.ToString()) < (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice + secPrice;
else if (float.Parse(temp.ToString()) == (secHours / secTime))
finalPrice = temp * secPrice + primaryPrice;
else
finalPrice = temp * secPrice + primaryPrice;
بسیار بسیار ممنووووووووون
در واقع چون temp رو به int تبدیل میکنم مقدارش گرد میشه و به عددی بزرگتر از secHours / seTime تبدیل میشه که تو شرطام نیست
ایووول داداش
نقل قول: مشکل این کد محاسباتیم چیه ؟
نقل قول:
نوشته شده توسط
hackman
بسیار بسیار ممنووووووووون
در واقع چون temp رو به int تبدیل میکنم مقدارش گرد میشه و به عددی بزرگتر از secHours / seTime تبدیل میشه که تو شرطام نیست
ایووول داداش
عزیزم منظورم از تشکر این بود که از دکمه ی تشکر واقع در گوشه ی پست هام استفاده کنی!
قابلی نداشت