1. مقدمة إلى BigDecimal
يتكون BigDecimal من قيمة غير صحيحة من أي دقة ومقياس عدد صحيح 32 بت. إذا كان صفرًا أو إيجابيًا ، فإن المقياس هو عدد الأرقام بعد النقطة العشرية. إذا كان الرقم السالب ، اضرب القيمة غير المقيدة للرقم بموجب طاقة مقياس سلبية قدرها 10. وبالتالي ، فإن القيمة التي يمثلها BigDecimal هي ( unscaledValue × 10-scale ).
2. إدخال BigDecimal
عند استخدام لغات برمجة JAVA مثل المصرفية والتمويل التي تتطلب حسابًا عالي الدقة للقيم العددية ، نستخدم غالبًا BigDecimal BigInteger بدلاً من int المشتركة ، long ، float ، والأنواع double ، خاصة عند التعامل مع بيانات النقطة العائمة.
دعنا أولاً نلقي نظرة على عرض رمز لاستخدام نوع البيانات الأساسي double للحساب والطباعة:
الفئة العامة mainclass {public static void main (string [] args) {system.out.println (0.02+0.01) ؛ System.out.println (0.05+0.01) ؛ }}النتائج كما يلي:
0.030.060000000000000000000000
والسؤال هو ، لماذا تظهر البيانات مع النتيجة الثانية؟ السبب الأساسي هو أن جهاز الكمبيوتر الخاص بنا ثنائي ، ولا يمكن أن يمثل الثنائي بدقة رقم نقطة عائم. هناك بعض الأخطاء عندما تستخدم وحدة المعالجة المركزية طريقة "Mandrel and Fection" (طريقة الترميز العلمي) للتعبير عن أرقام النقاط العائمة. لذلك ، عندما تكون متطلبات دقة البيانات مرتفعة نسبيًا ، لا يزال يتعين استخدام فئة BigDecimal ، على الرغم من أن سرعة الحساب أبطأ قليلاً.
3. الاستخدام الشريفي
هناك طريقتان لإنشاء كائن كبير: مُنشئ وطريقة ثابتة عامة ( BigDecimal.valueOf ). يجب الانتباه إلى نقطتين:
1. يتضمن المنشئ شكلين يستخدمون أنواع البيانات الأساسية والسلاسل كمعلمات. يوصى بهذا الأخير ، مثل: new BigDecimal(Double.valueOf(0.09)) . يمكنك تجربته. نتيجة الإخراج System.out.println(new BigDecimal(0.06).toString()); بيان: 0.05999999999999999997779553950749686919152736663818359375
2. عندما يطبع العشري السجل أو يتحول إلى أنواع البيانات الأساسية ، حاول استخدام الطريقة العامة xxxValue() التي توفرها ، مثل doubleValue() ، بدلاً من toString()
4. وضع التقريب الكبير
على الرغم من أن قاعدة البيانات تخزن رقمًا عائمًا عالي الدقة ، إلا أنه من الضروري عادة الحد من عدد الأرقام العشرية عند عرضها في التطبيقات ، مثل اثنين إلى ثلاثة ألفيات. في هذا الوقت ، تحتاج إلى استخدام وظيفة setScale ( int newScale, int roundingMode ). كمتغير ثابت عام من BigDecimal ، هناك العديد من قواعد التشغيل لوضع التقريب (وضع التقريب) وهناك ثمانية أنواع عامة. فيما يلي تفسير ، والوثيقة الرسمية تقدمه أيضًا.
1. round_up
جولة بعيدا عن الصفر. التخلي عن الجزء غير الصفر وإضافة رقم واحد مجاور للجزء غير الصفر.
2. Round_Down
جولة في الاتجاه بالقرب من الصفر. التخلي عن الجزء غير الصفر ، وفي الوقت نفسه ، لن يتم التخلص من العدد المجاور من الجزء عن طريق إضافة واحد إلى الجزء غير الصفر ، واعتراض السلوك.
3. Round_ceiling
جولة في اتجاه اللانهائي. إذا كان رقمًا إيجابيًا ، فإن نتيجة التقريب هي نفسها Round_up ؛ إذا كان رقمًا سالبًا ، فإن نتيجة التقريب هي نفسها Round_Down. ملاحظة: هذا الوضع لا يقلل من حجم القيمة.
4. Round_floor
جولة في اتجاه اللانهائي السلبي. إذا كان رقمًا إيجابيًا ، فإن نتيجة التقريب هي نفسها Round_Down ؛ إذا كان رقمًا سالبًا ، فإن نتيجة التقريب هي نفسها Round_UP. ملاحظة: لا يزيد هذا الوضع من حجم القيمة.
5. round_half_up
إن التقريب إلى الرقم "الأقرب" هو وضع تقريب للتقريب لأعلى إذا كانت المسافة إلى رقمين مجاورة متساوية. إذا تم تجاهل الجزء> = 0.5 ، فإن سلوك التقريب هو نفسه Round_UP ؛ وإلا فإن سلوك التقريب هو نفسه Round_Down. هذا النمط هو ما نسميه غالبًا "التقريب".
6. round_half_down
إن التقريب إلى الرقم "الأقرب" ، إذا كانت المسافة إلى رقمين مجازين متساوية ، فهي وضع مستدير للتقريب. إذا كان الجزء المهمل> 0.5 ، فإن سلوك التقريب هو نفسه Round_UP ؛ وإلا فإن سلوك التقريب هو نفسه Round_Down. هذا النموذج هو ما نسميه غالبًا "Donsionings".
7. round_half_even
جولة إلى الرقم "الأقرب" ، إذا كانت المسافة إلى رقمين مجازين متساوية ، يتم تقريب الأرقام الزوجية المجاورة. إذا تم التخلص من الرقم الفردي على يسار الجزء ، فإن سلوك التقريب هو نفسه Round_Half_UP ؛ إذا كان رقمًا متساويًا ، فإن سلوك التقريب هو نفسه Round_Half_Down. ملاحظة: يقلل وضع التقريب هذا خطأ التراكم عند سلسلة الحسابات المتكررة. يسمى وضع التقريب هذا أيضًا "طريقة التقريب المصرفي" ويستخدم بشكل أساسي في الولايات المتحدة. الجولة السادسة إلى ستة ، وخمس إلى حالتين. إذا كان الرقم السابق رقمًا غريبًا ، فسيقوم بإدخال الموضع ، وإلا فسيتم التخلي عنه.
8. Round_Unnecaterary
إن تشغيل طلب التأكيد له نتائج دقيقة ، لذلك لا يلزم التقريب. إذا تم تحديد وضع التقريب هذا لعملية تحصل على النتيجة الدقيقة ، يتم إلقاء ArithMeticeSception.
أدناه ، دعنا نقدم مثالاً لتوضيح نتائج الحساب العددي في أوضاع تقريبية مختلفة ، مع الحفاظ على واحد عشري:
5. ملخص
ما ورد أعلاه هو مقدمة كاملة من أوضاع جافا BigDecimal وثمانية من Java. آمل أن يكون محتوى هذه المقالة مفيدًا للجميع في تعلم Java.