View Full Version : مشکل کد چیست
majidsoft
شنبه 21 شهریور 1388, 12:23 عصر
با سلام
من از این کد برای میانگین گیری می خواهم استفاده کنم به شرطی که اگر صفر بود جز میانگین نباشد و فیلدهای صفر را حساب نکند . ولی جواب نمیدهد لطفا راهنمایی کنید
numbervar i;
NUMBERVAR K;
numbervar q;
for i:=1 to COUNT ({SUGARINF.MODTP}) step 1 do(
if ({SUGARINF.MODTP}) = 0 then k=k+1;
);
q:= sum({sugarinf.modtp})/((count ({sugarinf.modtp}))-k)
mn_zandy63
یک شنبه 22 شهریور 1388, 00:33 صبح
کدی که نوشتی توی یک حلقه فقط روی مقدار اولین رکورد عمل میکنه.
الآن نمیدونم دقیقا چطوری میتونی به تک تک رکورد ها دسترسی پیدا کنی، پیدا کردم بهت میگم.
یک نکته دیگه رو هم کلا دقت کن، کدت ممکنه به خطای Devid by zero بر بخوره.
اگه مقدار همه رکوردها صفر باشه، کسر تقسیمت صفر میشه.
مواظبش باش.
موفق باشی.
majidsoft
یک شنبه 22 شهریور 1388, 16:55 عصر
آقا فکر نکنم سوال سختی باشه یعنی کسی بلد نیست
mn_zandy63
جمعه 27 شهریور 1388, 08:42 صبح
سلام دوست عزیز
راه حلی که به ذهن من میرسه اینه که با یک فرمول تعداد مقادیر غیر صفر رو بشماری و بعد جمع مقادیر رو به تعداد غیر صفر ها تقسیم کنی.
بنابراین ابتدا یک فرمول میسازیم که به ازای مقادیر صفر، صفر خروجی بده و بازای مقادیر غیر صفر 1 خروجی بده. حالا اگه جمع مقادیر این فرمول رو حساب کنیم در واقع تعداد مقادیر غیر صفر رو شمردیم.
یک Formula Field اضافه کن، مثلا به اسم CoutCondition و مقدارش رو بذار:
if {SUGARINF.MODTP} <> 0 then
1
else
0
حالا این کد مقدار میانگین فیلد مورد نظرت رو بدون در نظر گرفتن مقادیر صفر حساب میکنه:
sum({SUGARINF.MODTP}) / sum({@CoutCondition})
و به این ترتیب میتونی مقدار میانگین فیلد مورد نظرت با احتساب مقادیر صفر به دست بیاری:
sum({SUGARINF.MODTP})/count({SUGARINF.MODTP})
و البته راه بهتری هم هست:
average({SUGARINF.MODTP})
موفق باشی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.