الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة تقريب لا اعرف ما السبب ؟

بدأه red_scorpion1 في 2 فبراير 2013 · 6 رد · 857 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

مشكلة تقريب تعبانى من امبارح فجزاكم الله خيرا المساعدة

استخدم هذا الكود فى تقريب خلية datagridview

 

CurRow.Cells["e_tamen_per_14_col"].Value = 
(double.Parse(CurRow.Cells["e_asasy_col"].Value.ToString())) * 0.14;
CurRow.Cells["e_tamen_per_14_col"].Value = Math.Round((double.Parse(CurRow.Cells["e_tamen_per_14_col"].Value.ToString()) / 0.05), 0) * 0.05;

 

والمشكلة هى ان هناك بعض الخلايا يظهر ناتج التقريب بها خطأ مثلا الرقم 228.75 * 0.14 = 32.025 وبتقريبه المفترض ان يكون 32.05 ولكنه يظهر 32.00 فقط ؟؟؟؟؟؟؟ ما الحل الأمثل لتفادى تلك المشكلة وجعل التقريب كما هو مفترض ؟؟؟؟؟؟؟؟؟

فى انتظار المساعدة جزاكم الله خيرا

#2

قم بتغيير هذا السطر

 

Math.Round(number, 2);

بما انك تحدد 0 فان المواقع بعد الفاصله العشريه تحذف

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3

اكمالا لرد اخي السابق mental-driller

حتى و ان وضعت

 

Math.Round(number, 2);

فإن ناتج  32.025 سيكون 32.03 حيث ان ال 5 تقرب الى 1 يضاف الى 0.02 فتصبح 0.03 ,

و ان ابقيتها كما في مثالك فإن النتيجه  32.025 ستكون 32 فقط و ليس 32.05 لانك تقرب لاقرب رقم صحيح

المهندس

#4
eng_ashraf كتب:

اكمالا لرد اخي السابق mental-driller

حتى و ان وضعت

 

Math.Round(number, 2);

فإن ناتج  32.025 سيكون 32.03 حيث ان ال 5 تقرب الى 1 يضاف الى 0.02 فتصبح 0.03 ,

و ان ابقيتها كما في مثالك فإن النتيجه  32.025 ستكون 32 فقط و ليس 32.05 لانك تقرب لاقرب رقم صحيح

 

المهندس اشرف ،لقد قمت بتجريب التقريب و كان يطبع 32.025 حسب اعتقادي فإنه سوف يقرب الى 32.03اذا كان الرقم 32.026

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

أخي بدل من أن تقسم على 0.05 وتقربها ثم تضربها ب 0.05

 

قم بضرب العدد ب 200 ثم خذ القسم الصحيح ثم قسمه على 100

 

CurRow.Cells["e_tamen_per_14_col"].Value = Math.Int(double.Parse(CurRow.Cells["e_tamen_per_14_col"].Value.ToString()) * 200) /100;

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 3 فبراير 2013 في 22:05

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#6

جزيل الشكر لجميع الأعضاء الكرام

 

تم حل المشكلة عن طريق استبدال  

double.Parse

 

بـــ

 

Convert.ToDouble

 

 

فهل من الممكن توضيح السبب ؟ والفرق بين الإثنين ؟

تم تعديل هذه المشاركة بواسطة red_scorpion1 في 7 فبراير 2013 في 20:32

#7

عجيب مع العلم أن الثانية تستدعي الأولى ضمناً

 

فهذا هو السورس كود لها

 

        public static double ToDouble(String value) { 
            if (value == null) 
                return 0;
            return Double.Parse(value, CultureInfo.CurrentCulture); 
        }

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

مواضيع مشابهة