بتاريخ: 4 أكتوبر 201015 سنة comment_200839 السلام عليكم أخوانى اعضاء هذا المنتدى الذى افضاله عليا كثيره جداًانا عندى مشكله وهى اريد التقريب الى اقرب ربع جنيه فلا أستطيع ذلك عن طريق roundمثال يوضح ذلك الرقم 25.33 يتم تقريبه لاقرب ربع جنيه الى 25.50الرقم 25.15 يتم تقريبة الى اقرب ربع جنيه الى 25.25الرقم 25.60 يتم تقريبه الى اقرب ربع جنيه الى 25.75السؤال هل توجد دالة ممكن ان تقرب الى اقرب ربع جنيه ارجو من اعضاء المنتدى مساعدتى فى ذلك تقديم بلاغ
بتاريخ: 4 أكتوبر 201015 سنة comment_200845 بحد علمي لا يوجد 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 أكتوبر 201015 سنة بواسطة tanbet تقديم بلاغ
بتاريخ: 4 أكتوبر 201015 سنة كاتب الموضوع comment_200851 جزاك الله خير اخى الكريم الحل مثالى شكراً تقديم بلاغ
بتاريخ: 4 أكتوبر 201015 سنة comment_200869 وعليكم السلام ورحمة الله وبركاتهلا أعرف إن كان هناك دالة فى أوراكل تقوم بهذا العملولكن يمكن عمل داله تقوم بحساب الكسر الموجود فى الرقم كالتالى : [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] تقديم بلاغ
بتاريخ: 4 أكتوبر 201015 سنة comment_200888 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 أكتوبر 201015 سنة كاتب الموضوع comment_201021 والله انا مش عارف اقول اه للإهتمام المبالغ فية من اعضاء هذا المنتداوجزاكم الله جميعاً خيراً تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.