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

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

صورة
- - - - -

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


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

#1 aboushaheen

aboushaheen

    مشترك

  • الأعضــاء
  • 60 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:تكنلوجيا المعلومات والحاسب الالي

تاريخ المشاركة 31 March 2008 - 10:11 PM

هذا الكود يقرب الارقام الي 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;



#2 amdabd

amdabd

    عضو نشط

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

تاريخ المشاركة 31 March 2008 - 10:16 PM

السلام عليكم
الاخ ابوشاهين
الكود يقوم باضافة الكسر العشري 75 الي الارقام الصحيحة
بمعني 555 تصبح 555.75

#3 amdabd

amdabd

    عضو نشط

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

تاريخ المشاركة 03 April 2008 - 04:39 AM

السلام عليكم

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 الملونة يمكننا بهذه الطريقة تلاشي اضافة الكسر العشري للارقام الصحيحة

#4 amdabd

amdabd

    عضو نشط

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

تاريخ المشاركة 03 April 2008 - 06:04 AM

الاخ العزيز
ماذا يحدث لو كان الكسر العشري 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, 03 April 2008 - 06:17 AM.


#5 aboushaheen

aboushaheen

    مشترك

  • الأعضــاء
  • 60 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:تكنلوجيا المعلومات والحاسب الالي

تاريخ المشاركة 07 April 2008 - 08:29 PM

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;