اذهب الي المحتوي
أوفيسنا

التقريب بدرجة محددة


zakwan

الردود الموصى بها

الاخوة الاكارم

السلام عليكم ورحمتة وبركاتة اما بعد ...

ماهي المعادلة التي يمكن ان تعمل التالي:

فالنفرض مثلا لدي هذه الارقام 22.44 او 25.70 او 37.84 او 15.23

مااحتاجة هو معادلة تشاهد بعد الفاصلة وتحسب التالي مابين 1 الى 25(ضع 25) ومن 26 الى 50 (ضع 50) ومن 56 الى 75 (ضع 75) ومن 76 الى 100 يعمل الرقم Rounding اي مثلا :

15.23==>> 15.25

22.44 ==>> 22.50

25.70 ==>> 25.75

37.84 ==>> 38.00

ارجوا الا يكون سؤالي صعب مع الشكر لكم .

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

و يوجد مثال فى قسم خلاصة مشاركات الاكسيل

فى هذا الموضوع

طرق مختلفة للتقريب

و المتغيرات في الدالة هي الرقم المطلوب تقريبه ثم درجة التقريب و التي هي هنا 0.25

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

استاذي محمد طاهر "حفظة الله"

اشكرك على ردك ومساعدتي ولكن يمكن لم اقدر ان اوصل لك طلبي على كل حال وجدت الحل جزئياً وهو كتالي {الرجاء اباء الرأي}:

15.23==>> 15.25 .........>>

(Left: Left([15.23],2

                              

  (Right: Right([15.23],2

                                         

 Expr1: IIf([right] Between 1 And 25,25,IIf([right] Between 26 And 50,50,IIf([right] Between 51 And 75,75,IIf([right] Between 75 And 99,1,0))))


Expr2: IIf([Expr1]=1,[Left]+1,IIf([Expr1]<76,([left] & "." & [Expr1])))

ولكن قابلتني مشكلة وهي في حال كان ضمن هذة الارقام رقم ناقص اي(-15.23) فأذا كان بالامكان المساعدة في ذلك

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

الدالة الاولي لم تكن أيضا مجهزة للسالب

فقمت بتعديلها سريعا و مرفق مثال لتطبيقها

فأرجو التجربة

مع ملاحظة أن التقريب للرقم كله و ليس للكسر فقط

و هذا لن يحدث فرقا فى التقريب الي 0.25 أو 0.5 أو 1

و لكن سيحدث فرق مثلا اذا قربنا الي درجة 0.35

فسيكون للرقم الصحيح تأثير فى التقريب

أرجو التجربة و اخباري بالنتيجة و هل أدت الغرض أم لا و هل أداؤها سليم أم لا لأعدلها

Function ROUNDTO(MYNO As Double, MyFraction As Double)

' to round up or down with a certain value

Dim MYBASE As Double, MYREM As Double


If Abs(Round(MyFraction, 2)) <= 0 Then

ROUNDTO = MYNO

Exit Function

End If


Dim neg As Boolean

neg = False

If MYNO < 0 Then neg = True


MYNO = Abs(MYNO * 100)

MyFraction = MyFraction * 100


MYREM = MYNO Mod MyFraction

'MsgBox "rem : " & MYREM

MYBASE = MYNO - MYREM

'MsgBox "Base : " & MYBASE


If MYREM > 0 Then

 If MYREM > MyFraction / 2 Then

 ROUNDTO = MYBASE + MyFraction

 Else

 ROUNDTO = MYBASE

 End If


Else

 ROUNDTO = MYNO

End If

ROUNDTO = ROUNDTO / 100

If neg = True Then ROUNDTO = -ROUNDTO

End Function

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

  • 1 month later...

أحبتي الكرام السلام عليكم ورحمة الله وبركاته

لدي مربع نص في نموذج يقوم بعملية حسابية ( القسمة) ويكون الناتج هو عدد عشري . والمطلوب هو كيف يمكن تحويل الناتج من عدد عشري إلى عدد صحيح . بغض النظر عن مقدار العدد العشري ( أي لا أريد التقريب الرياضي المعروف )

بمعنى آخر لو كان الناتج هو 11ر15 كيف أحوله إلى 16

وللجميع مني الشكر الجزيل مقدما

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

السلام عليكم

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

الفكرة هو أن أزيد على كل رقم قيمة الثابت Rnd ثم نأخذ قيمة الـ Round للمجموع .

طبعا ممكن الوصول للـ Rounding بنفس الدالة أدناه أو بالإصدارات السابقة ممكن تكون عن طريق Clng أو Cint أو Format

Sub Rounding_Test()

  Const Rnd = 0.5 - (1E-16)

  Dim Num As Double

  

  Num = 2.00000000000001

  MsgBox Round(Num + Rnd, 0)

End Sub

تحياتي .

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

تم تعديل المثال ( تعديل الدالة )

التقريب بدرجة محددة

و اضافة

التقريب الي الاعلي فقط بدرجة محددة

و تقريب الكسور الي الأعلي

و يلاحظ أن الارقام السالبة نعتبر قيمة التقريب لها أيضا بالسالب

Myround2.rar

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

قمت بتعديل المثال السابق

و قسمته الي 3 دوال

الاولي تقرب الرقم بدرجة تقريب محددة

و الثانية تقريب الرقم الي الاعلي دائما أيضا بدرجة تقريب محددة

و الاخيرة تقرب الكسور الي الاعلي فقط

اخي ابو هادي ، هل ممكن تفصل الطريق التي شرحتها فى المشاركة السابقة شوية زيادة :d

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

السلام عليكم

أخي محمد .. أنا آسف لم ألحظ السطر الأخير من ردك إلى مؤخرا :SHY:

من المعروف أنه ابتداء من 0.5 وما فوق تجبر إلى واحد عند التقريب .

وما أضيفه أنا على أي رقم قبل تقريبه هو 0.49999999999999 حيث لن يؤثر على أي رقم صحيح يعني تقريب 1.4999999999999999 مثلا سيصبح 1 ولكن هذ الرقم لو أضيف الى 1.00000000000001 فسيصبح مجموعه 1.5 وسيقرب ليصبح ناتجه 2 . وهذ كل ما أفعله أن أضيف الثابت Rnd إلى كل رقم أود تقريبه لأحصل على ناتج مايسمى في الأكسل بالـ Roundup .

تحياتي .

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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

×   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

×   Your previous content has been restored.   Clear editor

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

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information