إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

التقريب الى اقرب ربع جنيه


6 رد (ردود) على هذا الموضوع

#1 bahaadba

bahaadba

    عضو

  • الأعضــاء
  • 22 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 04 October 2010 - 08:59 AM

السلام عليكم أخوانى اعضاء هذا المنتدى الذى افضاله عليا كثيره جداً

انا عندى مشكله وهى اريد التقريب الى اقرب ربع جنيه فلا أستطيع ذلك عن طريق round
مثال يوضح ذلك
الرقم 25.33 يتم تقريبه لاقرب ربع جنيه الى 25.50
الرقم 25.15 يتم تقريبة الى اقرب ربع جنيه الى 25.25
الرقم 25.60 يتم تقريبه الى اقرب ربع جنيه الى 25.75
السؤال هل توجد دالة ممكن ان تقرب الى اقرب ربع جنيه
ارجو من اعضاء المنتدى مساعدتى فى ذلك

#2 tanbet

tanbet

    عضو

  • الأعضــاء
  • 43 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 04 October 2010 - 12:09 PM

بحد علمي لا يوجد function جاهز للتقريب الى ربع ولكن تستطيع استخدام ما يلي


لأقرب ربع (أقرب ربع الى الرقم سواء كان أكبر منه أو اصغر)
select round(6.60 * 4 ,0) /4 from dual

بحيث تعطي أقرب ربع الى الرقم
6.15 الى 6.25
6.33 الى 6.25
6.60 الى 6.50


أما لإعطائك النتائج التي تريد فأنت تحتاج أن تقرب الى أكبر ربع قريب من الرقم
وهنا تستخدم ceil

select ceil(6.60 * 4 ) /4 from dual

6.15 الى 6.25
6.33 الى 6.50
6.60 الى 6.75


وللعلم لأخذ أقرب أصغر ربع

select floor(6.60 * 4 ) /4 from dual

6.15 الى 6.00
6.33 الى 6.25
6.60 الى 6.50

تم التعديل بواسطة tanbet, 04 October 2010 - 12:10 PM.


#3 bahaadba

bahaadba

    عضو

  • الأعضــاء
  • 22 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 04 October 2010 - 12:42 PM

جزاك الله خير اخى الكريم
الحل مثالى
شكراً

#4 abu_ezzat

abu_ezzat

    مشترك

  • الأعضــاء
  • 135 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 04 October 2010 - 02:28 PM

جزاكم الله خيرا

#5 proMido

proMido

    عضو

  • الأعضــاء
  • 7 مشاركة

تاريخ المشاركة 04 October 2010 - 03:11 PM

وعليكم السلام ورحمة الله وبركاته
لا أعرف إن كان هناك دالة فى أوراكل تقوم بهذا العمل
ولكن يمكن عمل داله تقوم بحساب الكسر الموجود فى الرقم كالتالى :
[left]
FUNCTION APPROXIMATE_TO_QRTR ( V_PRICE IN NUMBER ) RETURN NUMBER 
IS

V_PRICE_WITHOUT_FRAC NUMBER;
V_FRACTION NUMBER;
V_NEW_PRICE NUMBER;

BEGIN

V_PRICE_WITHOUT_FRAC  := TRUNC(V_PRICE);

V_FRACTION := V_PRICE - V_PRICE_WITHOUT_FRAC ;

IF NVL(V_FRACTION,0)  > 0 AND NVL(V_FRACTION,0) < 0.25 THEN
   
   V_NEW_PRICE := V_PRICE_WITHOUT_FRAC + 0.25;
   
ELSIF NVL(V_FRACTION,0)  > 0.25 AND NVL(V_FRACTION,0) < 0.50 THEN
	  
	     V_NEW_PRICE := V_PRICE_WITHOUT_FRAC + 0.50;

ELSIF NVL(V_FRACTION,0)  > 0.50 AND NVL(V_FRACTION,0) < 0.75 THEN
	  
	     V_NEW_PRICE := V_PRICE_WITHOUT_FRAC + 0.75;
		 
ELSIF NVL(V_FRACTION,0)  > 0.75 THEN  
	  
	     V_NEW_PRICE := V_PRICE_WITHOUT_FRAC + 1 ;
		 
END IF;

RETURN NVL(V_NEW_PRICE ,0) ;

END;[/left]

ففى هذه الدالة نقوم باستخراج الكسر من الرقم ونحدد موقعة بين ما سيتم التقريب الية من الكسور (0.0 - 0.25 - 0.50 - 0.75 )
ثم نقوم بجمع الرقم بدون الكسر على الحد الجديد

ويمكن استدعاء الدالة كالتالى :


[left]DECLARE

NUM NUMBER;

BEGIN

	 NUM := APPROXIMATE_TO_QRTR(25.33) ;

END;

[/left]


#6 asd13

asd13

    عضو نشط

  • الأعضــاء
  • 266 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 04 October 2010 - 11:26 PM

create or replace function roundno (no number) return number is
x number(10,2);
z number;
n number(10,2);
begin
n:=round(no,2);
select substr(n,instr(n,'.')+1,2) into z from dual;
if z between 0 and 25 then 
x:=trunc(n,0)+.25;
elsif z between 26 and 50 then
x:=trunc(n,0)+.5;
elsif z between 51 and 75 then
x:=trunc(n,0)+.75;
elsif z between 76 and 99 then
x:=trunc(n,0)+1;
end if;
return (x);
end;

لكن الحل الاول حل محترم جدا

#7 bahaadba

bahaadba

    عضو

  • الأعضــاء
  • 22 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 07 October 2010 - 01:49 PM

والله انا مش عارف اقول اه للإهتمام المبالغ فية من اعضاء هذا المنتدا
وجزاكم الله جميعاً خيراً