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

الناس اللي تهوي التقريب


aboushaheen

Recommended Posts

هذا الكود يقرب الارقام الي 0.25 ومضاعفاتها
مثل 2253.21 يتم تقريبه الي 2253.25
وهكذا


declare


v_number number(10,2) :=&p_number;
v_inte number(10);
v_dcimal number(10,2);
begin
select substr(v_number,-2 ,2) into v_inte from dual;
if v_inte < 25 then
select trunc(v_number,0)+0.25 into v_dcimal from dual;
dbms_output.put_line(v_dcimal);
elsif v_inte between 26 and 50 then
select trunc(v_number,0)+0.50 into v_dcimal from dual;
dbms_output.put_line(v_dcimal);
elsif v_inte between 51 and 75 then
select trunc(v_number,0)+0.75 into v_dcimal from dual;
dbms_output.put_line(v_dcimal);
end if ;
end;

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

السلام عليكم

SET SERVEROUTPUT ON:


declare
v_number number(10,2) :=&p_number;
v_inte number(10);
v_dcimal number(10,2);
begin
--
if v_number-trunc(v_number,0) > 0 then
--
select substr(v_number,-2 ,2) into v_inte from dual;
if v_inte < 25 then
select trunc(v_number,0)+0.25 into v_dcimal from dual;
dbms_output.put_line(v_dcimal);
elsif v_inte between 26 and 50 then
select trunc(v_number,0)+0.50 into v_dcimal from dual;
dbms_output.put_line(v_dcimal);
elsif v_inte between 51 and 75 then
select trunc(v_number,0)+0.75 into v_dcimal from dual;
dbms_output.put_line(v_number);
end if ;
--
else
dbms_output.put_line(v_number);
end if ;
end;


الاخ العزيز بعد اضافة جملة if الملونة يمكننا بهذه الطريقة تلاشي اضافة الكسر العشري للارقام الصحيحة
رابط هذا التعليق
شارك

الاخ العزيز
ماذا يحدث لو كان الكسر العشري 25 مثال 5.25
>> لن تعطي نتيجة لان قيمة v_inte في هذه الحالة = 25
و لعلاج هذا الخطأ نقوم بإضافة = الي علامة > اي لتكون اصغر من او يساوي =>

if v_inte <= 25 then


بدلا من if v_inte < 25 then
---- :unsure:
لكن ماذا عن الكسور العشرية التالية
0.9 , 0.90 , 0.3 , 0.30 , 0.5 , 0.50 , 0.51
طبعا اقصد الكسر العشري نفسه و ليس القيمة المذكورة

تم تعديل بواسطة amdabd
رابط هذا التعليق
شارك

set serveroutput on ;
declare
v_number        number(10,2) :=&p_number;
v_dcimal          number(10,2);
begin if v_number - trunc(v_number) = 0 then 
dbms_output.put_line(v_number);
else
if v_number - trunc(v_number , 0) <= 0.25  then 
v_dcimal := trunc(v_number , 0 ) +0.25 ;
dbms_output.put_line(v_dcimal);
elsif v_number - trunc(v_number , 0)  between  0.26 and 0.50 then 
v_dcimal := trunc(v_number , 0 ) +0.50 ;
dbms_output.put_line(v_dcimal);
elsif v_number - trunc(v_number , 0)  between  0.51 and 0.75 then 
v_dcimal := trunc(v_number , 0 ) +0.75 ;
dbms_output.put_line(v_dcimal);
end if ;
end if ;
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.

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

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

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