يصف المثال الموجود في هذه المقالة طريقة تشغيل BigDecimal في Java. شاركها مع الجميع لتكون مرجعا لك. التحليل المحدد هو كما يلي:
نظرًا لأن الدالة double وfloat ليستا دقيقتين بدرجة كافية، فيجب استخدام BigDecimal عند إجراء الحسابات التجارية. يتم إنشاء كائن BigDecimal على النحو التالي:
انسخ الكود كما يلي: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
نتيجة الإخراج هي: 12.000001؛
يمكن تمرير BigDecimal في String ومضاعفته عند إنشائه، ولكن من الأفضل استخدام String. أما بالنسبة للسبب، فما عليك سوى إلقاء نظرة على الكود التالي:
انسخ الكود كما يلي: BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
BigDecimal c = new BigDecimal(12.01);
System.out.println(c);
نتيجة التشغيل هي:
12.000001
12.0099999999999997868371792719699442386627197265625
يمكن ملاحظة أن الدقة ستفقد عند تمرير المضاعفة.
العمليات الأخرى لـ BigDecimal هي كما يلي:
انسخ الكود كما يلي: //Addition
إضافة BigDecimal العامة الثابتة (String num1، String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
إرجاع bd1.add(bd2);
}
// الطرح
طرح BigDecimal الثابت العام (String num1، String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
إرجاع bd1.subtract(bd2);
}
// الضرب
BigDecimal الثابت العام يتضاعف (String num1، String num2) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
إرجاع bd1.multiply(bd2);
}
//قسم
تقسيم BigDecimal العام الثابت (String num1، String num2، int i) {
BigDecimal bd1 = new BigDecimal(num1);
BigDecimal bd2 = new BigDecimal(num2);
// i هو عدد الأرقام التي سيتم الاحتفاظ بها، ويمثل BigDecimal.ROUND_HALF_UP قاعدة التقريب
return bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
من الضروري التأكيد على القسمة. المعلمة الثالثة هي ما إذا كان سيتم التقريب.
ROUND_HALF_DOWN يعني أنه لن يتم إدخال 1 عند مواجهة 5، أي 1.5->1؛
ROUND_HALF_UP يعني أنه عند مواجهة 5، يتم إدخال 1، أي 1.5->2؛
ولكن هناك بعض الأشياء التي يجب ملاحظتها:
عندما نستخدم ROUND_HALF_DOWN، انسخ الكود كما يلي: System.out.println(this.divide("67.75", "5",4));
System.out.println(this.divide("67.75", "5",1));
System.out.println("-------");
System.out.println(this.divide("67.751", "5",4));
System.out.println(this.divide("67.751", "5",1));
نتائج التشغيل هي كما يلي:
13.5500
13.5
-------
13.5502
13.6
لقد كنت في حيرة من أمري منطقيا يجب أن تكون النتيجة الثانية 13.5! لماذا أصبح 13.6؟ وبعد اختبارات عديدة فكرت في الأمر ووجدت أن هذا التقريب لا يعتمد على الإزاحة بعد رقم الدقة ومقارنته بـ 5، بل تتم مقارنة جميع البيانات بعد رقم الدقة بـ 5. بمعنى آخر: 13.5500 دقيق لـ رقم واحد، ثم استخدم 0.0500 للمقارنة مع 5، و13.5502 دقيق لرقم واحد، ثم استخدم 0.0502 للمقارنة مع 5. وهو أكبر من 5، لذا فهو يغلق لأعلى.
آمل أن تكون هذه المقالة مفيدة لبرمجة جافا للجميع.