logo

كيفية التقريب المزدوج والتطفو إلى منزلتين عشريتين في Java؟

في Java، عندما نستخدم نوع بيانات مزدوج قبل متغير فإنه يمثل 15 رقمًا بعد العلامة العشرية. لكن في بعض الأحيان نطلب منزلتين عشريتين فقط بعد العلامة العشرية لتمثيل الروبية والوحدات الأخرى. لذلك، في هذا القسم، سنتحدث عن طرق لتقريب الرقم المزدوج والتطفو حتى منزلتين عشريتين جنبا إلى جنب مع المثال المناسب وبرامج جافا.

حالات اختبار junit
كيفية تقريب العدد المزدوج والتطفو إلى منزلتين عشريتين في Java

توفر Java الطرق الثلاث التالية لعرض مزدوج في منزلتين عشريتين:

  1. استخدام التنسيق العشري ('0.00')
  2. استخدام أسلوب String.format() ('%.2f')
  3. باستخدام BigDecimal

دعونا نناقش الطرق المذكورة أعلاه واحدة تلو الأخرى.

باستخدام التنسيق العشري

جافا تنسيق عشري هي فئة فرعية ملموسة من فئة NumberFormat المستخدمة لتنسيق الأرقام العشرية. يوفر الفصل وضع التقريب () طريقة لعرض رقم مزدوج يصل إلى منزلتين عشريتين.

بناء الجملة:

 public void setRoundingMode(RoundingMode roundingMode) 

يقبل وضع التقريب كمعلمة ويتجاوز طريقة setRoundingMode () الخاصة بـ تنسيق الرقم فصل. يرمي NullPointerException إذا لم نحدد أي وضع تقريب. يصف الجدول التالي أوضاع التقريب المختلفة.

ضع الرقم أعلى تحت سقف أرضية نصف_أعلى نصف_أسفل نصف_حتى غير ضروري
5.5 6 5 6 5 6 5 6 رمي استثناء حسابي
2.5 3 2 3 2 3 2 2 رمي استثناء حسابي
1.6 2 1 2 1 2 2 2 رمي استثناء حسابي
1.1 2 1 2 1 1 1 1 رمي استثناء حسابي
1.0 1 1 1 1 1 1 1 1
-1.0 -1 -1 -1 -1 -1 -1 -1 -1
-1.1 -2 -1 -1 -2 -1 -1 -1 رمي استثناء حسابي
-1.6 -2 -1 -1 -2 -2 -2 -2 رمي استثناء حسابي
-2.5 -3 -2 -2 -3 -3 -2 -2 رمي استثناء حسابي
-5.5 -6 -5 -5 -6 -6 -5 -6 رمي استثناء حسابي

لقد استخدمنا طريقة أخرى للفئة DecimalFormat وهي شكل() طريقة. يقوم بتنسيق سلسلة لإنتاج سلسلة.

بناء الجملة:

java
 public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) 

تقبل الطريقة ثلاث معلمات العدد والنتيجة والموضع. لكن المعلمتين الأخيرتين اختياريتان. تقوم بإرجاع سلسلة الأرقام المنسقة. يلقي الأسلوب استثناء حسابي لو وضع التقريب تم ضبطه على غير ضروري.

TwoDecimalPlace1.java

 import java.math.RoundingMode; import java.text.DecimalFormat; public class TwoDecimalPlace1 { //constructor of the DecimalFormat class private static final DecimalFormat decfor = new DecimalFormat('0.00'); public static void main(String args[]) { //defining a number of type double double num = 123.9876543567; System.out.println('Double Number: ' + num); System.out.println('Double Number: ' + decfor.format(num)); //123.99 //DecimalFormat, default is RoundingMode.HALF_EVEN decfor.setRoundingMode(RoundingMode.DOWN); System.out.println('
Before Rounding: ' + decfor.format(num)); //123.98 decfor.setRoundingMode(RoundingMode.UP); System.out.println('After Rounding Up: ' + decfor.format(num)); //123.99 } } 

انتاج:

 Double Number: 123.9876543567 Double Number: 123.99 Before Rounding: 123.98 After Rounding Up: 123.99 

باستخدام طريقة String.format()

توفر Java أيضًا طريقة format() لتنسيق الرقم. إنه ينتمي إلى فئة السلسلة. باستخدام هذه الطريقة، يمكن للمرء تنسيق أي رقم وسلسلة وفقًا لذلك.

ولتغيير الرقم إلى منزلتين عشريتين، نستخدم %.2f لتنسيق الرقم. لاحظ أننا لا نستطيع تقريب الرقم في طريقة String.format()، ودائمًا ما يتم تقريبه إلى النصف.

بناء الجملة:

 public static String format(String format, Object... args) 

تقبل الطريقة المعلمتين التاليتين:

كم عدد الأسابيع في الشهر

شكل: إنها سلسلة منسقة نريدها.

الحجج: هذه هي الوسائط المشار إليها بواسطة محددات التنسيق في سلسلة التنسيق.

تقوم بإرجاع السلسلة المنسقة. يرمي IllegalFormatException إذا كانت سلسلة التنسيق تحتوي على بناء جملة غير قانوني. ويرمي أيضا NullPointerException إذا حددنا التنسيق على أنه فارغ.

TwoDecimalPlace2.java

 public class TwoDecimalPlace2 { public static void main(String args[]) { //defining a number of type double double num = 10.98765432167; System.out.println('Double Number: ' + num); //use either of the following two statements for two decimal places both gives the same result System.out.println('Double Number: ' + String.format('%.2f', num)); System.out.format('Double Number: %.2f', num); } } 

انتاج:

 Double Number: 10.98765432167 Double Number: 10.99 Double Number: 10.99 

باستخدام BigDecimal

يمكننا أيضًا استخدام Java BigDecimal Class لعرض رقم يصل إلى منزلتين عشريتين. تنتمي إلى java.math.BigDecimal طَرد. يقوم بتوسيع فئة الرقم وتنفيذ قابلة للمقارنة واجهه المستخدم.

توفر الفئة طريقة setScale (). بناء الجملة هو كما يلي:

بناء الجملة:

 setScale(int newScale, RoundingMode roundingMode) 

تقبل الطريقة معلمتين:

خريطة reactjs

مقياس جديد: مقياس قيمة BigDecimal المراد إرجاعها.

وضع التقريب: وضع التقريب الذي نريد تطبيقه.

تقوم بإرجاع BigDecimal الذي مقياسه هو القيمة المحددة ويتم تحديد قيمته غير المقاسة عن طريق ضرب أو قسمة القيمة غير المقاسة لهذا BigDecimal على القوة المناسبة للعشرة للحفاظ على قيمتها الإجمالية.

الأسلوب يلقي استثناء حسابي لو وضع التقريب تم ضبطه على غير ضروري . RoundingMode هو التعداد الذي يوفر RoundingMode الذي تمت مناقشته أعلاه.

هناك طريقة أخرى استخدمناها في هذا البرنامج BigDecimal.doubleValue(). يقوم بتحويل BigDecimal إلى a مزدوج رقم. دعونا نرى مثالا.

TwoDecimalPlace3.java

 import java.math.BigDecimal; import java.math.RoundingMode; public class TwoDecimalPlace3 { public static void main(String args[]) { //defining a number of type double double num = 12.4565652239; System.out.println('Double Number: ' + num); BigDecimal bd = new BigDecimal(num).setScale(2, RoundingMode.HALF_UP); double newNum = bd.doubleValue(); System.out.println('Up to two decimal places: ' + newNum); } } 

انتاج:

 Double Number: 12.4565652239 Up to two decimal places: 12.46