Javas Decimalformat: كيفية رفض إدخال "غير صالح" مع الكسام العشرية المجمعة؟

StackOverflow https://stackoverflow.com/questions/1680120

سؤال

عند استخدام NumberFormat التالي:

    NumberFormat amountFormat = NumberFormat
        .getNumberInstance(I18N.getThreadLocale());
    amountFormat.setMaximumFractionDigits(2);
    amountFormat.setMinimumFractionDigits(2);

أحصل على النتائج التالية عند التحليل عبر

    System.out.println(amountFormat.parse(value));
  • 10,50 => 1050
  • 10,5 => 105
  • 0,25 => 25

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

كيف يمكنني تعطيل هذه المجموعة؟

أرغب في الحصول على النتائج التالية:

  • 10،50 => ParseException
  • 10،5 => ParseException
  • 0،25 => parseException

هل هناك طريقة قياسية للقيام بذلك؟ أو هل يجب علي برمجة NumberFormat الخاصة بي؟

هل كانت مفيدة؟

المحلول

مشكلة واحدة هي شخصية التجميع ('،' في لغة إنجليزية). لتعطيل دعم التجميع لمثيل NumberFormat، يمكنك ببساطة استدعاء SetGroupingErused (FALSE).

ومع ذلك، يؤدي ذلك إلى مشكلة مختلفة، أي أن numberformat يوضح من بداية السلسلة، حتى يصل إلى حرف غير معروف. سيعود تحليل ("12FOO") 12 عاما، تماما كما سيعود تحليل ("10،50") 10 إذا تم تعطيل التجميع. للتحقق مما إذا كانت سلسلة الإدخال بأكملها محرما فعلا، يجب عليك استخدام طرق التحليل بوسيطة تحليل وتحقق من فهرسها وإذا كانت سلسلة الإدخال كانت تحليلها حتى النهاية أو إذا توقف المحلل المحلل في وضع سابق في السلسلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top