كيفية تنفيذ مخصص التقريب إجراءات

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية196652
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
هناك عدد من خوارزميات التقريب مختلفة في منتجات Microsoft. التقريب نطاق خوارزميات من "تدوير الرياضي" الموجودة في دالة Round() ورقة عمل في Excel على Rounding الخاص مصرفي في دالات CInt() و CLng() Round() في Visual Basic for Applications. توضح هذه المقالة ما المتنوعة Visual Basic for Applications دالات التقريب كما يوفر نماذج من استخدام الدالات. بالإضافة إلى ذلك، تحتوي هذه المقالة على ارتباطات يتضمن دالات نموذج تطبيق خوارزميات التقريب المختلفة.
معلومات أخرى

التقريب شرح

يلزم تقريب عندما ترغب في تحويل رقم من الدقة أكبر إلى عدد من دقة أقل. الحالة الأكثر شيوعاً عندما تحتاج إلى تحويل رقم الفاصلة عائمة إلى عدد صحيح.

التقريب لأسفل

هو أبسط نموذج من التقريب الاقتطاع. يتم ببساطة تجاهل أية أرقام بعد الدقة المطلوبة. دالة VBA Fix() مثالاً الاقتطاع. على سبيل المثال، Fix(3.5) 3 ويتم Fix(-3.5) هو 3.

تقريب الدالة Int() إلى عدد أعلى صحيح أقل من القيمة. كل Int() و Fix() تعمل بنفس الطريقة مع أرقام موجبة - اقتطاع - ولكن يعطي نتائج مختلفة للأرقام السالبة: Int(-3.5) يعطي-4.

دالة Fix() مثالاً التقريب المتماثل لأنه يؤثر الحادث (القيمة المطلقة) الأرقام الموجبة والسالبة بنفس الطريقة. دالة Int() مثالاً التقريب غير المتماثلة لأنه يؤثر الحادث الأرقام الموجبة والسالبة بشكل مختلف.

يتضمن Excel دالات جدول البيانات المتشابهة: Int() و Floor() RoundDown(). يعمل Int() بنفس الطريقة كما يفعل Int() في Visual Basic for Applications. اقتطاع القيم الموجبة Floor() ولكن لا يعمل مع الأرقام السالبة. تعمل دالة RoundDown() بنفس دالة VBA Fix() الطريقة.

يحتوي Microsoft SQL Server دالة Round() التي يمكن أن تعمل مثل دالة VBA Fix(). يتضمن SQL Server أيضاً دالة Floor() يعمل بنفس الطريقة مثل دالة VBA Int().

التقريب لأعلى

SQL Server و Excel كلا يكون استدعاء Ceiling() دوماً تقريب القيم كسر لأعلى (موجبة أكثر) إلى القيمة دالة.

لم يكن Visual Basic for Applications دالة لأعلى الدورة المطابق. ومع ذلك، للأرقام السالبة كل Fix() و Int() يمكن استخدام لتقريب إلى أعلى ، بطرق مختلفة.

تقريب Fix() باتجاه 0 (أعلى في ملائماً المطلق ولكن لأسفل من حيث الحجم المطلقة). هو Fix(-3.5)-3.5.

تقريب Int() بعيداً عن 0 (أعلى من حيث الحجم المطلقة ولكن لأسفل في ملائماً مطلق). هو Int(-3.5)-4.

تدوير حسابي

التقريب دوماً لأسفل أو لأعلى الرقم الناتج لا يتم بالضرورة الأقرب إلى الرقم الأصلي. على سبيل المثال، إذا قمت تقريبه 1.9 إلى 1 الفرق أكبر الكثير من إذا كنت تقريبه فإنه يصل إلى 2. من السهل مشاهدة يجب أن يتم تقريب الأرقام من 1-6 إلى 2.4 إلى 2.

ولكن, ماذا حوالي 1.5 وهو equidistant بين 1 و 2 ؟ بواسطة اصطلاح ، يتم تقريب الرقم طريقة نصف لأعلى.

يمكنك تنفيذ التقريب طريقة نصف الأرقام بشكل متماثل بحيث تقريب-.5 "-1 أو في الشكل غير متماثلة ، حيث يتم تقريب-.5 إلى 0.

توفر الدالات التالية التقريب حسابي المتماثل:
دالة جدول البيانات Round() Excel.
يمكن تنفيذ دالة SQL Server Round() التقريب حسابي المتماثل.

توفر الدالة التالية التقريب غير متماثل حسابي:
أسلوب Round() مكتبة رياضيات Java.

لم يتم أي دالة أدى التقريب حسابي Visual Basic for Applications.

تدوير الخاص banker

عند إضافة قيم مستدير الزوايا معاً, دوماً تقريب.5 في نفس الاتجاه النتائج في الانحياز يتمدد مع الأرقام من إضافة معاً. أحد الطرق للحد من الانحياز باستخدام التقريب الخاصة banker.

تقريب التقريب الخاصة banker.5 إعداد أحياناً "و" تحريك للأسفل في بعض الأحيان. اصطلاح تقريبه إلى أقرب عدد زوجي بحيث كل 1.5 و 2.5 تقريبه إلى 2، و 3.5 4.5 كليهما تقريبه إلى 4. التقريب الخاصة banker المتماثل.

في Visual Basic for Applications الدالات الرقمية التالية بتنفيذ التقريب الخاصة banker: CByte() و CInt() CLng() CCur() و Round().

لا توجد أية دالات جدول بيانات Excel تنفيذ التقريب الخاصة banker.

تدوير عشوائي

التقريب banker حتى يمكن إزاحة الإجماليات. يمكنك أخذ خطوة إضافية إزالة الانحياز وذلك تقريب.5 لأعلى أو لأسفل بشكل عشوائي بشكل صحيح. بهذه الطريقة حتى إذا تم منحرف البيانات عن عمد ، الانحياز قد يكون مصغراً. ومع ذلك، قد يؤدي استخدام التقريب عشوائي مع بيانات موزعة بشكل عشوائي في الانحياز أكبر من التقريب الخاصة banker. قد ينتج عن التقريب عشوائي بين إجماليات مختلفة على نفس البيانات.

تطبيق منتجات Microsoft لا يوجد أي الفرز من الإجراء التقريب عشوائي.

البديل التقريب

يتم بين 0.5 لأعلى و لأسفل 0.5 التقريب التقريب البديل على المكالمات المتتابعة.

تطبيق لم منتجات Microsoft إجراء التقريب بديل.

هي دالة Round() Inconsistently يتم التنفيذ

لم يتم تنفيذ الدالة Round() بطريقة متناسقة بين منتجات Microsoft مختلفة لأسباب التاريخية.

تتعلق الجدول التالي المنتج التنفيذ:
   Product                             Implementation   ----------------------------------------------------------------------   Visual Basic for Applications 6.0   Banker's Rounding   Excel Worksheet                     Symmetric Arithmetic Rounding   SQL Server                          Either Symmetric Arithmetic Rounding                                       or Symmetric Round Down (Fix)                                       depending on arguments   Java Math library                   Asymmetric Arithmetic Rounding				

تنفيذ دالة Round() في Visual Basic 6.0 و Visual Basic for Applications 6.0 التقريب الخاصة banker. يحتوي على وسيطة ثانية اختياري الذي يحدد عدد الأرقام العشرية تقريبه إلى:
   Debug.Print Round(2.45, 1) returns 2.4.				

نموذج البيانات

يعرض الجدول التالي بعض البيانات النموذجية وتأثيرات الأساليب المختلفة التقريب على أرقام والإجماليات التي تم إنشاؤها.
   Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt.   ---------------------------------------------------------------------   -2.6   -3   -2  -2      -3          -3           -3       -3     -3   -2.5   -3   -2  -2      -2          -3           -2       -2     -3   -2.4   -3   -2  -2      -2          -2           -2       -2     -2   -1.6   -2   -1  -1      -2          -2           -2       -2     -2   -1.5   -2   -1  -1      -1          -2           -2       -1     -1   -1.4   -2   -1  -1      -1          -1           -1       -1     -1   -0.6   -1    0   0      -1          -1           -1       -1     -1   -0.5   -1    0   0       0          -1            0       -1     -1   -0.4   -1    0   0       0           0            0        0      0    0.4    0    0   1       0           0            0        0      0    0.5    0    0   1       1           1            0        1      1    0.6    0    0   1       1           1            1        1      1    1.4    1    1   2       1           1            1        1      1    1.5    1    1   2       2           2            2        1      1    1.6    1    1   2       2           2            2        2      2    2.4    2    2   3       2           2            2        2      2    2.5    2    2   3       3           3            2        3      3    2.6    2    2   3       3           3            3        3      3				

إجمالي كافة الأرقام:
   Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt.   ---------------------------------------------------------------------   0.0    -9   0   9       3            0           0        1      0				

إجمالي كافة الأرقام السالبة:
   Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt.   ---------------------------------------------------------------------   -13.5  -18  -9  -9      -12          -15         -13      -13    -14				

إجمالي كافة الأرقام الموجبة:
   Number/Int./Fix/Ceiling/Asym. Arith./Sym. Arith./Banker's/Random/Alt.   ---------------------------------------------------------------------   13.5   9    9   18      15           15          13       14     14				

يعرض الجدول الفرق بين الأساليب التقريب المختلفة. أرقام الموجبة والسالبة موزعة بشكل عشوائي, Fix() التقريب حسابي المتماثل ، التقريب الخاصة banker و التقريب مع تبديل اللونين توفر الفرق أقل من المجاميع الفعلية مع التقريب عشوائي لا الآن خلف.

ومع ذلك، إذا كانت الأرقام إما كافة كافة سالبة أو موجبة banker الخاص التقريب المتبادلة التقريب و التقريب عشوائي يوفر الفرق أقل من المجاميع الفعلي.

نموذج معرف من قبل المستخدم التقريب الوظائف

نموذج التعليمة البرمجية في المقطع "قائمة الدالات" التالية توفر تطبيقات العينة لكل من أنواع التقريب وصفه.

الدالات المتوفرة:
   AsymDown      Asymmetrically rounds numbers down - similar to Int().                 Negative numbers get more negative.   SymDown       Symmetrically rounds numbers down - similar to Fix().                 Truncates all numbers toward 0.                 Same as AsymDown for positive numbers.   AsymUp        Asymmetrically rounds numbers fractions up.                 Same as SymDown for negative numbers.                 Similar to Ceiling.   SymUp         Symmetrically rounds fractions up - that is, away from 0.                 Same as AsymUp for positive numbers.                 Same as AsymDown for negative numbers.   AsymArith     Asymmetric arithmetic rounding - rounds .5 up always.                 Similar to Java worksheet Round function.   SymArith      Symmetric arithmetic rounding - rounds .5 away from 0.                 Same as AsymArith for positive numbers.                 Similar to Excel Worksheet Round function.   BRound        Banker's rounding.                 Rounds .5 up or down to achieve an even number.                 Symmetrical by definition.   RandRound     Random rounding.                 Rounds .5 up or down in a random fashion.   AltRound      Alternating rounding.                 Alternates between rounding .5 up or down.   ATruncDigits  Same as AsyncTrunc but takes different arguments.				

كافة هذه الدالات يستغرق الوسيطتين: رقم سيتم تقريبه و عامل اختياري. في حالة حذف factor، الدالات بإرجاع عدد صحيح إنشاؤه بواسطة إحدى الطرق المذكورة أعلاه. إذا تم تحديد عامل تم تغيير الرقم بواسطة العامل لإنشاء تأثيرات مختلفة التقريب. على سبيل المثال يعطي AsymArith (2.55, 10) 2.6 ، بمعنى، تقريب إلى 1/عامل = 1/10 = 0.1.

ملاحظة: عامل 0 بإنشاء خطأ وقت التشغيل: 1/عامل = 1/0.

يوضح الجدول التالي التأثيرات عوامل مختلفة:
   Expression       Result  Comment   --------------------------------------------------------------------   AsymArith(2.5)     3     Rounds up to next integer.   BRound(2.18, 20)   2.2   Rounds to the nearest 5 cents (1/20 dollar).   SymDown(25, .1)   20     Rounds down to an even multiple of 10.				

الاستثناء إلى الوصف أعلاه هو ADownDigits دالة قالب يسمح لك بتحديد عدد الأرقام العشرية بدلاً من عامل.
   Expression            Result Comment   ---------------------------------------------------------------------   ADownDigits(2.18, 1)    2.1  Rounds down to next multiple of 10 ^ -1.				

سرد الدالة


   Function AsymDown(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double     AsymDown = Int(X * Factor) / Factor   End Function   Function SymDown(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double     SymDown = Fix(X * Factor) / Factor   '  Alternately:   '  SymDown = AsymDown(Abs(X), Factor) * Sgn(X)   End Function   Function AsymUp(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double   Dim Temp As Double     Temp = Int(X * Factor)     AsymUp = (Temp + IIf(X = Temp, 0, 1)) / Factor   End Function   Function SymUp(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double   Dim Temp As Double     Temp = Fix(X * Factor)     SymUp = (Temp + IIf(X = Temp, 0, Sgn(X))) / Factor   End Function   Function AsymArith(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double     AsymArith = Int(X * Factor + 0.5) / Factor   End Function   Function SymArith(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double     SymArith = Fix(X * Factor + 0.5 * Sgn(X)) / Factor   '  Alternately:   '  SymArith = Abs(AsymArith(X, Factor)) * Sgn(X)   End Function   Function BRound(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double   '  For smaller numbers:   '  BRound = CLng(X * Factor) / Factor   Dim Temp As Double, FixTemp As Double     Temp = X * Factor     FixTemp = Fix(Temp + 0.5 * Sgn(X))     ' Handle rounding of .5 in a special manner     If Temp - Int(Temp) = 0.5 Then       If FixTemp / 2 <> Int(FixTemp / 2) Then ' Is Temp odd         ' Reduce Magnitude by 1 to make even         FixTemp = FixTemp - Sgn(X)       End If     End If     BRound = FixTemp / Factor   End Function   Function RandRound(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double   ' Should Execute Randomize statement somewhere prior to calling.   Dim Temp As Double, FixTemp As Double     Temp = X * Factor     FixTemp = Fix(Temp + 0.5 * Sgn(X))     ' Handle rounding of .5 in a special manner.     If Temp - Int(Temp) = 0.5 Then       ' Reduce Magnitude by 1 in half the cases.       FixTemp = FixTemp - Int(Rnd * 2) * Sgn(X)     End If     RandRound = FixTemp / Factor   End Function   Function AltRound(ByVal X As Double, _            Optional ByVal Factor As Double = 1) As Double   Static fReduce As Boolean   Dim Temp As Double, FixTemp As Double     Temp = X * Factor     FixTemp = Fix(Temp + 0.5 * Sgn(X))     ' Handle rounding of .5 in a special manner.     If Temp - Int(Temp) = 0.5 Then       ' Alternate between rounding .5 down (negative) and up (positive).       If (fReduce And Sgn(X) = 1) Or (Not fReduce And Sgn(X) = -1) Then       ' Or, replace the previous If statement with the following to       ' alternate between rounding .5 to reduce magnitude and increase       ' magnitude.       ' If fReduce Then         FixTemp = FixTemp - Sgn(X)       End If       fReduce = Not fReduce     End If     AltRound = FixTemp / Factor   End Function   Function ADownDigits(ByVal X As Double, _            Optional ByVal Digits As Integer = 0) As Double     ADownDigits = AsymDown(X, 10 ^ Digits)   End Function				

ملاحظة: مع بذلك استثناء من Excel MRound() دالة ورقة العمل, المضمن الذي - في التقريب دالات يستغرق الوسيطات بطريقة ADownDigits حيث الوسيطة الثانية تقوم بتحديد عدد الأرقام بدلاً من عامل.

استخدام تطبيقات التقريب تقديم هنا عامل مثل MRound() ، وهو أكثر مرونة لأنه ليس لديك تقريبه إلى بأساس من 10. يمكنك كتابة برنامج تضمين دالات بطريقة ADownDigits.

عائم القيود تنطبق نقطة

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

حيث يمكن التعبير عن القيم كسري ليست كافة بالضبط, قد يمكنك الحصول على نتائج غير متوقعة لأن قيمة العرض لا يتطابق مع القيمة المخزنة.

على سبيل المثال، رقم 2.25 ربما يكون قد تم تخزينها داخليًا كـ... ، 2.2499999 الذي هل تقريبه مع التقريب حسابي بدلاً من إعداد كما قد تتوقع. أيضاً، من الحسابات يتم وضع رقم خلال أكبر احتمالية أن سوف deviate القيمة الثنائية المخزنة من القيمة العشرية مثالي.

إذا كانت هذه هي الحالة قد تحتاج إلى اختيار نوع بيانات مختلفة مثل العملة يتم بالضبط إلى 4 من المنازل العشرية.

أيضاً فعليك إجراء أنواع البيانات Variant واستخدام CDec() لتحويل كل شيء إلى نوع بيانات عشري والتي يمكن أن تكون محددة إلى الأرقام العشرية 28.

قيم عملة التقريب

عند استخدام نوع البيانات العملة وهو بالضبط 4 أرقام عشرية عادةً تريد تقريبه إلى الأرقام العشرية 2 لـ cents.

هي الدالة Round2CB أسفل تباين تلوينها القرص الثابت الذي ينفذ التقريب الخاصة banker إلى الأرقام العشرية 2 ولكن لم ضرب رقم الأصلي. تجنب هذا شرط تجاوز سعة محتملة إذا يقترب مقدار نقدية حدود نوع البيانات العملة.
   Function Round2CB (ByVal X As Currency) As Currency     Round2CB = CCur(X / 100) * 100   End Function				

التقريب قيم عشرية

التالي مثال غير متماثل حسابي التقريب باستخدام نوع البيانات عشري:
   Function AsymArithDec(ByVal X As Variant, _            Optional ByVal Factor As Variant = 1) As Variant     If Not IsNumeric(X) Then       AsymArithDec = X     Else       If Not IsNumeric(Factor) Then Factor = 1       AsymArithDec = Int(CDec(X * Factor) + .5)     End If   End Function				

إفلات الدقة كاختصار في التقريب

كما taught في المدرسة ، التقريب عادةً من حسابي التقريب باستخدام أرقام موجبة. مع هذا النوع من التقريب تحتاج فقط إلى معرفة الرقم إلى 1 رقم السابقة حيث يتم تقريبه إلى. تجاهل الأرقام بعد منزلة عشرية الأول. بمعنى آخر، يتم إسقاط الدقة كاختصار التقريب القيمة.

على سبيل المثال، كل 2.5 و 2.51 المستديرة يصل إلى 3 أثناء كل 2.4 و 2.49 تقريبه إلى 2.

عند استخدام التقريب الخاصة banker (أو أساليب أخرى تقريب.5 أعلى أو أسفل) أو عند تقريب الأرقام السالبة باستخدام التقريب غير متماثل حسابي بإسقاط الدقة قد يؤدي إلى نتائج غير صحيحة حيث قمت قد المستديرة وليس من أقرب عدد.

على سبيل المثال، مع التقريب الخاصة banker 2.5 تقريب إلى تقريب 2 و 2.51 يصل إلى 3.

مع التقريب حسابية غير متماثل تقريب 2.5 2 حتى أثناء تقريب-2.51 إلى 3.

وضع الدالات المعرفة من قبل المستخدم في هذه المقالة رقم الذي الدقة الكاملة في الاعتبار عند تنفيذ التقريب.
مراجع
تعليمات Visual Basic الإصدار 6.0; الموضوع: Int ، دالات إصلاح; دالة دائرية

Transact SQL تعليمات Microsoft; الموضوع: دالة Round; دالة أرضية; دالة سقف

(ج) 1998 شركة Microsoft ، كافة حقوق محجوز. المساهمات بواسطة Malcolm Stewart ، Microsoft Corporation.

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 196652 - آخر مراجعة: 12/05/2015 09:52:13 - المراجعة: 3.2

Microsoft Visual Basic Control Creation Edition, Microsoft Visual Basic 5.0 Learning Edition, Microsoft Visual Basic 6.0 Learning Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft Visual Basic for Applications 5.0, Microsoft Visual Basic for Applications 6.0, Microsoft SQL Server 6.0 Standard Edition, Microsoft SQL Server 6.5 Standard Edition, Microsoft SQL Server 7.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto KB196652 KbMtar
تعليقات