الفئة الرئيسية المستخدمة: java.text.decimalformat
1. لتشكيل كائن ما ، يمكنك استخدام الطريقتين التاليتين:
نسخة الكود كما يلي:
decimalformat df = (decimalformat) numberFormat.getInstance () ؛
decimalformat df1 = (decimalformat) decimalformat.getInstance () ؛
لأن DecimalFormat يرث من numberFormat.
2. حدد عدد الأماكن العشرية
إن النظام الافتراضي إلى الأماكن العشرية هو 3 ، مثل:
نسخة الكود كما يلي:
decimalformat df = (decimalformat) numberFormat.getInstance () ؛
System.out.println (df.format (12.3456789)) ؛
الإخراج: 12.346
يمكنك الآن ضبط العشري على رقمين من خلال الطريقة التالية:
نسخة الكود كما يلي:
df.setmaximfractionDigits (2) ؛
System.out.println (df.format (12.3456789)) ؛
ثم الإخراج هو: 12.35
3. هناك طريقتان لتحويل الأرقام إلى نسبة مئوية:
(1)
نسخة الكود كما يلي:
df.applypattern ("##. ## ٪") ؛
System.out.println (df.format (12.3456789)) ؛
System.out.println (df.format (1)) ؛
System.out.println (df.format (0.015)) ؛
المخرجات هي: 1234.57 ٪ 100 ٪ 1.5 ٪
(2)
نسخة الكود كما يلي:
df.setmaximfractionDigits (2) ؛
System.out.println (df.format (12.3456789*100)+"٪") ؛
System.out.println (df.format (1*100)+"٪") ؛
System.out.println (df.format (0.015*100)+"٪") ؛
المخرجات هي:
1،234.57 ٪ 100 ٪ 1.5 ٪
4. اضبط حجم المجموعة
نسخة الكود كما يلي:
decimalformat df1 = (decimalformat) decimalformat.getInstance () ؛
df1.setGroupingsize (2) ؛
System.out.println (df1.format (123456789)) ؛
الإخراج: 1،23،45،67،89
يمكنك أيضًا تعطيل إعدادات التجميع بواسطة DF1.SetGroupingused (FALSE) ؛
نسخة الكود كما يلي:
decimalformat df1 = (decimalformat) decimalformat.getInstance () ؛
df1.setGroupingsize (2) ؛
df1.setGroupingused (false) ؛
System.out.println (df1.format (123456789)) ؛
الإخراج: 123456789
5. اضبط العشري على رقمين
نسخة الكود كما يلي:
decimalformat df2 = (decimalformat) decimalformat.getInstance () ؛
df2.applypattern ("0.00") ؛
system.out.println (df2.format (1.2)) ؛
الإخراج: 1.20
في بعض الأحيان نحتاج إلى التحكم في تنسيق أرقام الإخراج.
ربما لا تهتم بالتنسيق ، لكنك تحتاج إلى الاهتمام ببرنامجك عالميًا في جميع أنحاء العالم.
System.out.println (1234.56) ؛
في الولايات المتحدة ". كيف تتعامل مع هذا؟
يمكن لبعض الحزم في حزمة java.text التعامل مع هذا النوع من المشكلات. يستخدم المثال البسيط التالي تلك الفئات لحل المشكلة التي أثيرت أعلاه:
نسخة الكود كما يلي:
استيراد java.text.numberformat ؛
استيراد java.util.locale ؛
الطبقة العامة decimalformat1 {
الفراغ الثابت العام (سلسلة args []) {
// احصل على التنسيق الافتراضي المحلي
numberFormat nf1 = numberFormat.getInstance () ؛
System.out.println (NF1.Format (1234.56)) ؛
// احصل على التنسيق الألماني
numberFormat NF2 =
numberFormat.getInstance (locale.german) ؛
System.out.println (NF2.Format (1234.56)) ؛
}}
إذا كنت في الولايات المتحدة ، بعد تشغيل البرنامج ، الإخراج:
1،234.56
1.234،56
بمعنى آخر ، استخدم العادات المختلفة لتمثيل الأرقام في أماكن مختلفة.
تقوم طريقة numberFormat.getInstance () بإرجاع مثيل رقم numberFormat (في الواقع فئة فرعية محددة من NumberFormat ، مثل DecimalFormat) ، وهو مناسب لتنسيق رقم بناءً على الإعدادات المحلية. يمكنك أيضًا استخدام الإعدادات الإقليمية غير الافتراضية ، مثل ألمانيا. تقوم طريقة التنسيق ثم بتنظيم الأرقام وفقًا لقواعد إقليمية محددة. يمكن أيضًا استخدام هذا البرنامج في شكل بسيط:
NumberFormat.getInstance (). Format (1234.56)
لكن حفظ التنسيق ثم إعادة استخدامه أكثر كفاءة. التدويل يمثل مشكلة كبيرة عند تنسيق الأرقام.
آخر هو تحكم فعال في هذا التنسيق ، مثل تحديد عدد الأرقام في الجزء الكسري.
نسخة الكود كما يلي:
استيراد java.text.decimalformat ؛
استيراد java.util.locale ؛
الطبقة العامة decimalformat2 {
الفراغ الثابت العام (سلسلة args []) {
// احصل على التنسيق الافتراضي المحلي
decimalformat df1 = new decimalformat ("###. 000") ؛
system.out.println (df1.format (1234.56)) ؛
// احصل على التنسيق الألماني
locale.setDefault (locale.german) ؛
decimalformat df2 = new decimalformat ("###. 000") ؛
System.out.println (df2.format (1234.56)) ؛
}
}
في هذا المثال ، تم تعيين تنسيق الأرقام ، باستخدام رموز مثل "####. 000". هذا الوضع يعني أن هناك أربعة أرقام قبل النقطة العشرية. إخراج البرنامج:
1234.560
1234،560
وبالمثل ، يمكن أيضًا التحكم في التنسيقات في شكل أسي ، على سبيل المثال:
نسخة الكود كما يلي:
استيراد java.text.decimalformat ؛
الطبقة العامة decimalformat3 {
الفراغ الثابت العام (سلسلة args []) {
decimalformat df = new decimalformat ("0.000e0000") ؛
System.out.println (df.format (1234.56)) ؛
}
}
الإخراج:
1.235e0003
للنسب المئوية:
نسخة الكود كما يلي:
استيراد java.text.numberformat ؛
الطبقة العامة DecimalFormat4 {
الفراغ الثابت العام (سلسلة args []) {
numberFormat nf = numberFormat.getPercenterNstance () ؛
System.out.println (NF.Format (0.47)) ؛
}
}
الإخراج:
47 ٪
حتى الآن ، رأيت عدة تقنيات مختلفة لتنسيق أرقام. من ناحية أخرى ، كيف أقرأ وأجعل سلسلة تحتوي على أرقام منسقة؟ يتم تضمين دعم القرار في NumberFormat. على سبيل المثال:
نسخة الكود كما يلي:
استيراد java.util.locale ؛
استيراد java.text.numberformat ؛
استيراد java.text.parseException ؛
الطبقة العامة decimalformat5 {
الفراغ الثابت العام (سلسلة args []) {
// التنسيق المحلي
numberFormat nf1 = numberFormat.getInstance () ؛
كائن OBJ1 = فارغ ؛
// تحليل القائم على التنسيق
يحاول {
OBJ1 = NF1.Parse ("1234،56") ؛
}
catch (parseException e1) {
System.err.println (E1) ؛
}
System.out.println (OBJ1) ؛
// التنسيق الألماني
numberFormat NF2 =
numberFormat.getInstance (locale.german) ؛
كائن OBJ2 = فارغ ؛
// تحليل القائم على التنسيق
يحاول {
OBJ2 = NF2.Parse ("1234،56") ؛
}
catch (parseException e2) {
System.err.println (E2) ؛
}
System.out.println (OBJ2) ؛
}
}
ينقسم هذا المثال إلى جزأين ، وكلاهما يجرس سلسلة: "1234،56". يستخدم الجزء الأول التنسيق المحلي لتحليله ، في حين يستخدم الجزء الثاني التنسيق الألماني لتحليله. عندما يعمل البرنامج في الولايات المتحدة ، فإن النتيجة هي:
123456
1234.56
وبعبارة أخرى ، يعتبر "1234،56" عددًا صحيحًا كبيرًا من 123456 في الولايات المتحدة ، وعشرية من "1234.56" في ألمانيا.
هناك أيضًا السؤال الأخير من مناقشة التنسيق. في المثال أعلاه ، يتم استخدام كل من decimalformat و numberformat. غالبًا ما يتم استخدام DecimalFormat للحصول على التحكم الجيد في التنسيق ، بينما يتم استخدام NumberFormat في كثير من الأحيان لتحديد مناطق مختلفة عن المحلية. كيف تجمع بين فئتين؟
تدور الإجابة حول حقيقة أن DecimalFormat هي فئة فرعية من NumberFormat ، والتي يتم تحديد مثيلها كمنطقة محددة. لذلك ، يمكنك تحديد منطقة باستخدام numberformat.getInstance ثم إلقاء الهيكل على كائن DecimalFormat. يذكر الوثائق أنه يمكن تطبيق هذه التقنية في معظم الحالات ، ولكن تحتاج إلى استخدام كتلة Try/Catch لتطويق الممثلين في حالة عدم عمل التحويل بشكل صحيح (من المفترض أن تستخدم منطقة غريبة في مواقف غير مزعجة للغاية). إليك مثال مثل هذا:
نسخة الكود كما يلي:
استيراد java.text.decimalformat ؛
استيراد java.text.numberformat ؛
استيراد java.util.locale ؛
الطبقة العامة DecimalFormat6 {
الفراغ الثابت العام (سلسلة args []) {
decimalformat df = null ؛
// احصل على كائن NumberFormat و
// يلقي إلى كائن DecimalFormat
يحاول {
df = (decimalformat)
numberFormat.getInstance (locale.german) ؛
}
catch (classcastexception e) {
System.err.println (e) ؛
}
// وضع وضع التنسيق
df.applypattern ("####. 00000") ؛
// تنسيق رقم
System.out.println (df.format (1234.56)) ؛
}
}
تحصل طريقة getInstance () على التنسيق ، ثم تستدعي طريقة ApplyPattern () لتعيين وضع التنسيق ، والمخرجات:
1234،56000
إذا كنت لا تهتم بالتدويل ، فيمكنك استخدام DecimalFormat مباشرة.