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

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


bahaadba

Recommended Posts

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

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

رابط هذا التعليق
شارك

بحد علمي لا يوجد 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
رابط هذا التعليق
شارك

وعليكم السلام ورحمة الله وبركاته
لا أعرف إن كان هناك دالة فى أوراكل تقوم بهذا العمل
ولكن يمكن عمل داله تقوم بحساب الكسر الموجود فى الرقم كالتالى :


[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]

رابط هذا التعليق
شارك

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;



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

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية