التقريب والمقياس
تحكّموا في الدقة وأنماط التقريب
التقريب والمقياس درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
المقياس والدقة
يملك كل كائن BigDecimal مقياسًا، وهو عدد الأرقام الموجودة إلى يمين الفاصلة العشرية. للمقدار 12.340 مقياس يساوي 3. يتيح لك التحكم في المقياس عرض النقود بمنزلتين عشريتين تمامًا.
فحص المقياس
استدعِ scale() لمعرفة عدد المنازل العشرية التي تحملها القيمة، وprecision() لمعرفة العدد الإجمالي للأرقام المهمة.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.340");
System.out.println(v.scale());
System.out.println(v.precision());
}
}استخدم setScale لتثبيت المنازل العشرية
تفرض setScale عددًا محددًا من المنازل العشرية للقيمة. ويجب تمرير RoundingMode إذا كان التقريب مطلوبًا.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.3456");
System.out.println(v.setScale(2, RoundingMode.HALF_UP));
}
}HALF_UP، نمط التقريب الشائع
يقرّب RoundingMode.HALF_UP إلى الرقم الأقرب، ويقرّب حالات التعادل بعيدًا عن الصفر. وهذا هو التقريب المعتاد الذي يتعلمه الناس في المدرسة.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_UP));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_UP));
}
}HALF_EVEN، تقريب المصرفيين
يقرّب HALF_EVEN حالات التعادل نحو الرقم الزوجي الأقرب. ويقلل ذلك الانحياز عبر عمليات التقريب المتعددة، ولذلك تفضله المصارف.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_EVEN));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_EVEN));
}
}CEILING وFLOOR
يقرّب CEILING دائمًا نحو اللانهاية الموجبة، بينما يقرّب FLOOR دائمًا نحو اللانهاية السالبة، بصرف النظر عن الرقم الذي سيُحذف.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.1");
System.out.println(v.setScale(0, RoundingMode.CEILING));
System.out.println(v.setScale(0, RoundingMode.FLOOR));
}
}DOWN وUP
يقتطع DOWN باتجاه الصفر، بينما يقرّب UP دائمًا بعيدًا عن الصفر. ويمثل DOWN اقتطاعًا بسيطًا.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.9");
System.out.println(v.setScale(0, RoundingMode.DOWN));
System.out.println(v.setScale(0, RoundingMode.UP));
}
}التقريب أثناء القسمة
قد تنتج القسمة منازل عشرية لا نهائية، ولذلك تحدد المقياس ونمط التقريب مباشرةً في استدعاء divide.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal bill = new BigDecimal("100.00");
BigDecimal people = new BigDecimal("3");
System.out.println(bill.divide(people, 2, RoundingMode.HALF_UP));
}
}إزالة الأصفار اللاحقة
يزيل stripTrailingZeros الأصفار الزائدة. ادمجه مع toPlainString لتجنب الترميز العلمي في الناتج.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.300");
System.out.println(v.stripTrailingZeros().toPlainString());
}
}تنسيق النقود
للعرض، اضبط المقياس على 2 باستخدام HALF_UP حتى تعرض الأسعار منزلتين عشريتين دائمًا، بما في ذلك المبالغ الصحيحة.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("7");
System.out.println(amount.setScale(2, RoundingMode.HALF_UP));
}
}اختيار النمط
اختر HALF_UP للتقريب العادي الموجّه إلى المستخدم، وHALF_EVEN للمحاسبة من أجل تقليل الانحياز التراكمي. حدّد نمطًا دائمًا حتى لا يرمي برنامجك استثناءً عند ظهور نتائج غير منتهية.
اختبار سريع
اختبر معرفتك بالمقياس والتقريب.
مراجعة
تعلّمت كيفية التحكم في الدقة:
- المقياس هو عدد الأرقام بعد الفاصلة العشرية
- تثبت
setScaleالمنازل العشرية، وتتطلبRoundingMode - يمثل
HALF_UPالتقريب المعتاد، بينما يمثلHALF_EVENتقريب المصرفيين - يغطي كل من
CEILINGوFLOORوUPوDOWNالتقريب الاتجاهي - حدّد نمطًا دائمًا للقسمة لتجنب الاستثناءات
الأسئلة الشائعة
هل درس «التقريب والمقياس» مجاني؟
نعم — نص درس «التقريب والمقياس» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «التقريب والمقياس»؟
تحكّموا في الدقة وأنماط التقريب تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التقريب والمقياس»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.