bahaadba بتاريخ: 4 أكتوبر 2010 تقديم بلاغ مشاركة بتاريخ: 4 أكتوبر 2010 السلام عليكم أخوانى اعضاء هذا المنتدى الذى افضاله عليا كثيره جداًانا عندى مشكله وهى اريد التقريب الى اقرب ربع جنيه فلا أستطيع ذلك عن طريق roundمثال يوضح ذلك الرقم 25.33 يتم تقريبه لاقرب ربع جنيه الى 25.50الرقم 25.15 يتم تقريبة الى اقرب ربع جنيه الى 25.25الرقم 25.60 يتم تقريبه الى اقرب ربع جنيه الى 25.75السؤال هل توجد دالة ممكن ان تقرب الى اقرب ربع جنيه ارجو من اعضاء المنتدى مساعدتى فى ذلك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
tanbet بتاريخ: 4 أكتوبر 2010 تقديم بلاغ مشاركة بتاريخ: 4 أكتوبر 2010 (معدل) بحد علمي لا يوجد function جاهز للتقريب الى ربع ولكن تستطيع استخدام ما يلي لأقرب ربع (أقرب ربع الى الرقم سواء كان أكبر منه أو اصغر) select round(6.60 * 4 ,0) /4 from dualبحيث تعطي أقرب ربع الى الرقم6.15 الى 6.256.33 الى 6.256.60 الى 6.50أما لإعطائك النتائج التي تريد فأنت تحتاج أن تقرب الى أكبر ربع قريب من الرقم وهنا تستخدم ceil select ceil(6.60 * 4 ) /4 from dual6.15 الى 6.256.33 الى 6.506.60 الى 6.75وللعلم لأخذ أقرب أصغر ربع select floor(6.60 * 4 ) /4 from dual6.15 الى 6.006.33 الى 6.256.60 الى 6.50 تم تعديل 4 أكتوبر 2010 بواسطة tanbet اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
bahaadba بتاريخ: 4 أكتوبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 4 أكتوبر 2010 جزاك الله خير اخى الكريم الحل مثالى شكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
abu_ezzat بتاريخ: 4 أكتوبر 2010 تقديم بلاغ مشاركة بتاريخ: 4 أكتوبر 2010 جزاكم الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
proMido بتاريخ: 4 أكتوبر 2010 تقديم بلاغ مشاركة بتاريخ: 4 أكتوبر 2010 وعليكم السلام ورحمة الله وبركاتهلا أعرف إن كان هناك دالة فى أوراكل تقوم بهذا العملولكن يمكن عمل داله تقوم بحساب الكسر الموجود فى الرقم كالتالى : [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] اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
asd13 بتاريخ: 4 أكتوبر 2010 تقديم بلاغ مشاركة بتاريخ: 4 أكتوبر 2010 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; لكن الحل الاول حل محترم جدا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
bahaadba بتاريخ: 7 أكتوبر 2010 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 7 أكتوبر 2010 والله انا مش عارف اقول اه للإهتمام المبالغ فية من اعضاء هذا المنتداوجزاكم الله جميعاً خيراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.