Javas Decimalformat: كيفية رفض إدخال "غير صالح" مع الكسام العشرية المجمعة؟
-
16-09-2019 - |
سؤال
عند استخدام 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 إذا تم تعطيل التجميع. للتحقق مما إذا كانت سلسلة الإدخال بأكملها محرما فعلا، يجب عليك استخدام طرق التحليل بوسيطة تحليل وتحقق من فهرسها وإذا كانت سلسلة الإدخال كانت تحليلها حتى النهاية أو إذا توقف المحلل المحلل في وضع سابق في السلسلة.