تخطَّ إلى المحتوى

BigDecimal / BigInteger

أعداد كاملة وعشريّة كبيرة الدقة BigDecimal / BigInteger

BigDecimal للأعداد العشرية الدقيقة (أعمال مالية) وBigInteger للأعداد الصحيحة الكبيرة جدًا — بلا حدود.

double و float لهما حدود الدقة — 0.1 + 0.2 لا يساوي 0.3. BigDecimal يحل هذا بتمثيل عشري دقيق. BigInteger لأعداد صحيح أكبر من Long.MAX_VALUE.

الصياغة

BigDecimal val = new BigDecimal("0.1");
BigDecimal sum = val.add(new BigDecimal("0.2"));

BigInteger big = new BigInteger("99999999999999999999");

📄 مثال

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

// BigDecimal:
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
System.out.println(a.add(b)); // 0.3 (دقيق!)

BigDecimal price = new BigDecimal("19.99");
BigDecimal tax = price.multiply(new BigDecimal("0.15"))
    .setScale(2, RoundingMode.HALF_UP);
System.out.println(tax); // 3.00

// BigInteger:
BigInteger fact = BigInteger.ONE;
for (int i = 2; i <= 50; i++) {
    fact = fact.multiply(BigInteger.valueOf(i));
}
System.out.println(fact); // 50! كامل

أهم النقاط

العنصرالوظيفة
BigDecimal(String)إنشاء بدقة كاملة — لا تستخدم new BigDecimal(0.1)
add/subtract/multiply/divideعمليات حسابية تُرجع كائن جديد
setScale(scale, rounding)تحديد خانات عشريّة وطريقة التقريب
BigIntegerأعداد صحيحة بلا حدود — تدعم factorials وأعداد ضخمة

💡 نصائح عملية

  • لأعمال مالية: استخدم BigDecimal دائمًا بدل double — 0.1 + 0.2 = 0.3 بدقة
  • لا تستخدم BigDecimal(double) — استخدم String لتجنب أخطاء التمثيل

⚠️ أخطاء شائعة

  • new BigDecimal(0.1) يُعطي 0.10000000000000000555 — استخدم String بدلاً
  • compareTo بدل equals: BigDecimal("1.0") equals BigDecimal("1.00") يُرجع false

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVA الكامل بالعربي.