c# - محلولة - تحليل رقم النقطة العائمة: هل هناك خوارزمية Catch All؟




رموز الخوارزميات (3)

أعتقد أن أفضل ما يمكنك فعله في هذه الحالة هو أخذ مدخلاتها ثم إظهارها لما تعتقد أنها تعني. إذا لم يوافقوا على ذلك ، فقم بإظهار التنسيق الذي تتوقعه واطلب منهم إدخاله مرة أخرى.

أحد الأشكال الممتعة للبرمجة متعددة الثقافات هو تنسيقات الأرقام.

  • يستخدم الأمريكيون 10،000.50
  • يستخدم الألمان 10.000،50
  • الفرنسية استخدام 10 000،50

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

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

سيكون "الحل الأمثل" الواضح هو اكتشاف ثقافة المستخدم أو مستعرضه ، لكن هذا لا يعمل إذا كان لديك فرنسي يستخدم مستعرض / نظام en-US.

هل يحتوي .net Framework على بعض محلل النقاط العائمة السحرية السوداء الأسطورية الأفضل من Double.(Try)Parse() في محاولة اكتشاف تنسيق الأرقام تلقائيًا؟


الفرق بين 12.345 باللغتين الفرنسية والإنجليزية عامل من 1000. إذا قمت بتوفير نطاق متوقع حيث أقصى <1000 * دقيقة ، فيمكنك التخمين بسهولة.

خذ على سبيل المثال ارتفاع الشخص (بما في ذلك الرضع والأطفال) مم.

باستخدام نطاق يتراوح بين 200-3000 ، يمكن تفسير مدخلات من 1.800 أو 1800 بشكل لا لبس فيه على أنه متر واحد و 80 سنتيمترًا ، في حين يمكن تفسير مدخلات قدرها 912.300 أو 912300 بشكل لا لبس فيه على أنه 91 سنتيمترًا و 2.3 ملليمتر.


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

double d = Double.Parse("5,000.00", NumberStyles.Any, CultureInfo.InvariantCulture);




globalization