จุดสำคัญอย่างหนึ่งที่พาดพิงถึง แต่ไม่ได้กล่าวถึงโดยตรงคือความแตกต่างระหว่าง"ความแม่นยำ"และ"สเกล"และวิธีที่ใช้ในสองข้อความ "ความแม่นยำ"คือจำนวนรวมของตัวเลขนัยสำคัญในจำนวนหนึ่ง "scale"คือจำนวนตัวเลขทางด้านขวาของจุดทศนิยม
Constructor MathContext ยอมรับเฉพาะความแม่นยำและ RoundingMode เป็นอาร์กิวเมนต์เท่านั้นดังนั้นสเกลจะไม่ถูกระบุในคำสั่งแรก
setScale()
เห็นได้ชัดว่ายอมรับขนาดเป็นอาร์กิวเมนต์เช่นเดียวกับ RoundingMode แต่ความแม่นยำไม่เคยระบุไว้ในคำสั่งที่สอง
หากคุณเลื่อนจุดทศนิยมไปทางขวาความแตกต่างจะชัดเจน:
// 1.
new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP));
//result = 35.35
// 2.
new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP);
// result = 35.3456