PDA

View Full Version : دستور round در کوئری



AHMAD-AHMAD
یک شنبه 31 تیر 1386, 10:47 صبح
با سلام
کوئری ساختم که در یک ستون آن دستور round کردن ستون دیگر را نوشته ام. ولی هنگام رند کردن اعدادی که اعشارشان 0.5 است اگر یکان عدد ، فرد باشد به بالا رندمیکند مثلا 3.5 را 4 میدهد ولی اگر یکان عدد زوج باشد به پایین رند میکند مثلا 2.5 را 2 میدهد . چگونه میتوان دستوری داد که همه 0.5 ها را به بالا رند کند. با تشکر

شاپرک
چهارشنبه 03 مرداد 1386, 14:36 عصر
جالبه تابحال دقت نکرده بودم ...
کسی تابع دیگه ای سراغ نداره ؟

مهدی قربانی
چهارشنبه 03 مرداد 1386, 16:54 عصر
سلام
بله مورد جالبیه فکر می کنم بواسطه استفاده از توابع شرطی وحلقه در کوئری و یا ماجول Round کردن اعداد بصورت غیر مستقیم ( بدون استفاده از تابع Round ) و یا استفاده از تابع Round با سایر توابع بصورت ترکیبی امکانپذیر باشه البته بد نیست روی این مورد کار کنیم و دوستان عزیز اگر به نتیجه ای رسیدند برای استفاده سایرین ارائه بفرمایند .

mazoolagh
چهارشنبه 03 مرداد 1386, 23:25 عصر
شما میتونین با format اینکار رو انجام بدین - یک چیزی شبیه


format(X,"#")

مهدی قربانی
پنج شنبه 04 مرداد 1386, 14:00 عصر
شما میتونین با format اینکار رو انجام بدین دوست عزیز ممنون جالب بود اما بد نیست با روشهای دیگه هم بررسی بشه مثلاً گرد کردن دلخواه عدد به بالا یا پائین . البته توابع ROUNDUP و ROUNDDOWN در Excel قابل استفاده هست ولی در Access این توابع قابل استفاده نیستند .

mazoolagh
پنج شنبه 04 مرداد 1386, 15:06 عصر
خوب نوشتن این تابع مشکل نیست - X مقداری هست که قرار هست گرد بشه و Round_Type نوع گرد شدن رو مشخص میکنه :
صفر برای گرد شدن به نزدیکترین مقدار
یک برای گرد به بالا
دو برای گرد به پایین



Public Function Round_(X, Round_Type) As Long
Select Case Round_Type
Case 1 ' Round Up
Round_ = IIf(X = Int(X), Int(X), Int(X) + 1)
Case 2 ' Round Down
Round_ = Int(X)
Case Else ' Round Nearest (default)
If Abs(X - Int(X)) < 0.5 Then
Round_ = Int(X)
Else
Round_ = Int(X) + 1
End If
End Select
End Function


باحتمال زیاد احتیاج به تصحیح کد هست!