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 الكامل بالعربي.