0Pricing
Java Academy · درس

العمل باستخدام BigDecimal

حساب عشري دقيق

العمل باستخدام BigDecimal درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

الحساب العشري الدقيق

تمثل BigDecimal من الحزمة java.math الأعداد العشرية بدقة اعتباطية ومن دون أخطاء تقريب خفية. وهي الأداة القياسية للحسابات المالية.

إنشاء BigDecimal

الطريقة الأكثر أمانًا لإنشاء BigDecimal هي استخدام سلسلة نصية. فهذا يحافظ على الأرقام الدقيقة التي كتبتها.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal amount = new BigDecimal("42.50");
        System.out.println(amount);
    }
}

عدم القابلية للتغيير

إن BigDecimal غير قابل للتغيير. فالعمليات مثل add لا تغيّر القيمة الأصلية، بل تعيد BigDecimal جديدًا. يجب حفظ القيمة المعادة.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("10");
        a.add(new BigDecimal("5"));
        System.out.println(a);
    }
}

الجمع والطرح

استخدم add وsubtract، وتذكّر حفظ النتيجة. فكل استدعاء يعيد قيمة جديدة.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal price = new BigDecimal("19.99");
        BigDecimal tax = new BigDecimal("1.60");
        BigDecimal total = price.add(tax);
        System.out.println(total);
    }
}

الضرب

تعمل multiply كما هو متوقع. لاحظ أن مقياس النتيجة يساوي مجموع مقياسي المعاملين.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal unit = new BigDecimal("2.50");
        BigDecimal qty = new BigDecimal("3");
        System.out.println(unit.multiply(qty));
    }
}

تتطلب القسمة حذرًا

تنتج قسمة القيم التي لا تنقسم بالتساوي، مثل قسمة 1 على 3، عددًا عشريًا لا نهائيًا. لذلك يرمي الاستدعاء العادي divide استثناء ArithmeticException.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal one = new BigDecimal("1");
        BigDecimal three = new BigDecimal("3");
        try {
            System.out.println(one.divide(three));
        } catch (ArithmeticException e) {
            System.out.println("Need to specify rounding!");
        }
    }
}

القسمة مع التقريب

مرّر مقياسًا وRoundingMode لإجراء القسمة بأمان. نحتفظ هنا بمنزلتين عشريتين ونقرّب إلى الأعلى عند المنتصف.

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal one = new BigDecimal("1");
        BigDecimal three = new BigDecimal("3");
        System.out.println(one.divide(three, 2, RoundingMode.HALF_UP));
    }
}

مقارنة القيم

استخدم compareTo لمقارنة القيمة الرقمية. لا تستخدم equals، لأن equals يأخذ المقياس في الاعتبار؛ لذلك لا تكون 2.0 و2.00 متساويتين باستخدام equals، لكنهما متساويتان باستخدام compareTo.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("2.0");
        BigDecimal b = new BigDecimal("2.00");
        System.out.println(a.equals(b));
        System.out.println(a.compareTo(b) == 0);
    }
}

ثوابت مفيدة

توفر BigDecimal ثوابت جاهزة: BigDecimal.ZERO وBigDecimal.ONE وBigDecimal.TEN. استخدمها بدلًا من إنشاء ثوابتك الخاصة.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal sum = BigDecimal.ZERO;
        sum = sum.add(BigDecimal.TEN);
        System.out.println(sum);
    }
}

جمع قائمة

من الأنماط الشائعة البدء من BigDecimal.ZERO وإضافة كل قيمة في حلقة، مع حفظ النتيجة في كل مرة.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal[] prices = {
            new BigDecimal("1.10"),
            new BigDecimal("2.20"),
            new BigDecimal("3.30")
        };
        BigDecimal total = BigDecimal.ZERO;
        for (BigDecimal p : prices) {
            total = total.add(p);
        }
        System.out.println(total);
    }
}

أفضل الممارسات

تذكّر الأساسيات: أنشئ القيم من سلاسل نصية، وتعامل معها على أنها غير قابلة للتغيير، وحدد التقريب دائمًا عند القسمة، وقارن باستخدام compareTo.

اختبار سريع

اختبر معرفتك بـ BigDecimal.

مراجعة

تعلّمت كيفية التعامل مع BigDecimal:

  • أنشئه من سلسلة نصية للحفاظ على الأرقام الدقيقة
  • هو غير قابل للتغيير، لذا احفظ نتيجة كل عملية
  • استخدم add وsubtract وmultiply مباشرةً
  • تحتاج divide إلى مقياس وRoundingMode عند الحصول على نتائج غير منتهية
  • قارن باستخدام compareTo، وليس equals

الأسئلة الشائعة

هل درس «العمل باستخدام BigDecimal» مجاني؟

نعم — نص درس «العمل باستخدام BigDecimal» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «العمل باستخدام BigDecimal»؟

حساب عشري دقيق تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «العمل باستخدام BigDecimal»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا لا نستخدم double للأموال
  2. العمل باستخدام BigDecimal
  3. التقريب والمقياس
  4. BigInteger للأعداد الضخمة
← العودة إلى Java Academy