المتابعون للمدونة

الأحد، 17 فبراير 2019

قاعدة تقريب رجال المصارف!!


قاعدة تقريب رجال المصارف!!

ذكرت في منشور سابق إن أحد الفروق بين فيجوال بيزيك وسي شارب، هو أن تحويل عدد به كسر عشري إلى عدد صحيح يتم في فيجوال بيزيك بالتقريب (تحويل 3.8 إلى عدد صحيح يعطي 4) بينما يتم في سي شارب بالتخلص من الكسر العشري بدون تقريب الجزء الصحيح (تحويل 3.8 إلى عدد صحيح يعطي 3)!

المفاجأة التي اكتشفتها الآن بعد 21 سنة من التعامل مع فيجوال بيزيك، هي الطريقة الغريبة التي تقرب بها فيجوال بيزيك الكسر 0.5 ، فهي تقربه إلى أقرب عدد زوجي!!.. فمثلا العدد 3.5 سيتم تقريبه إلى 4، والعدد 4.5 سيتم تقريبه إلى 4 أيضا وليس 5!!.. هذه القاعدة في تقريب النصف تسمى قاعدة تقريب رجال المصارف Bankers rounding!.. الحقيقة أنني لم أمر بأي موقف يكشف هذا التصرف الغريب من قبل، وأشك أنه لم يكن موجودا في VB6 وربما كذلك في الإصدارات الأولى من VB.NET!.. لاحظ أن هذه هي الطريقة التي تعمل بها أيضا الدالة Math.Round ما لم تستخدم معاملها الأخير لاختيار تقريب نقطة المنتصف إلى العدد الأبعد عن الصفر (سالبا أو موجبا).
جرب:
VB.NET:
Console.WriteLine(CInt(4.5)) ' 4
Console.WriteLine(CInt(3.5)) '  4 

C#:
Console.WriteLine((int)4.5); // 4
Console.WriteLine((int)3.5); // 3

 

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر