استفسار عن دالة Math.Round واستخدامها في استخلاص سعر المخزون

السلام عليكم

أقوم هذه الأيام ببرمجة برنامج "بسيط" لتسجيل واردات وصادرات مخزن لصديق لي باستخدام C#.NET

كل الأصناف تدخل وتخرج من المخزن بسعر الشراء ولا توجد نسبة ربح

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

حيث أن فواتير الشراء (الوارد) تسجل فيها الاصناف المشتراة بالوحدة الكبرى (كرتونة أو صندوق)

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

وهنا لا بد من قسمة سعر الوحدى الكبرى على عدد الوحدات الصغرى لاستخلاص سعر الوحدة الصغرى

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

مثال: كرتونة بدينار تحتوي على ثلاث قطع -----> سعر القطعة يساوي 0.333

أما سعر ثلاث قطع فهو 0.999 وليس ديناراً وهذه نتيجة صحيحة

مع كثرة السجلات سيزيد الفارق بنسب كبيرة وغير مرضية فما الحل؟

استخدمت دالة math.round ولكنها تقرب أي رقم عشري إلى أقرب رقم صحيح

هذا بالنسبة للصيغة البسيطة للدالة

هناك تقريبا 7 overloads لها ولكن فضلت أن استشريكم قبل حتى أن أجربها لعل مبرمجي الأنظمة التجارية لديهم مفهوم آخر لا أعلم عنه

أي اقتراحات ؟

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

في الحسابات المالية والدقيقة تجنب استخدام double و single واستخدم فقط decimal

في الخلفية احفظ الرقم كما هو بدون تقريب

ولكن في الإظهار استخدم String Format لإظهار خانتين بعد الفاصلة أو ثلاث حسب أجزاء العملة المستخدمة إن كانت 2 أو 3

نعم استخدم decimal منذ البداية، قرأت عن أنه نوع البيانات المخصص للتعامل مع العملة

ولكن اذا اظهرت الخانات العشرية 2 أو 3 فقط وحفظت في الخلفية كامل الخانات ألن تحدث فروقات عند الجمع؟

بطبيعة الحال سأقوم بجمع المبلغ الاجمالي سواء في شاشة الفاتورة او في تقرير الطباعة او في عملية الحفظ في قاعدة البيانات

وهنا يحدث الفرق وهذا ما يقلقني حقيقةً! أخشى أن أخطئ في الحسابات

بالمناسبة: قضيت ليلة البارحة وقتاً طويلا في البحث عن مواضيع مشابهة ورأيت ردا لك في منتدى الفريق العربي، هذا ما شجعني لأطرح الموضوع هنا :D

شكرا أخي عبدالرحمن