การใช้ java.math.RoundingMode

รู้จักและใช้งาน java.math.RoundingMode

RoundingMode เป็นคลาส หนึ่ง ในคลาสมาตรฐานของ java ซึ่งอยู่ใน java.math.RoundingMode

RoundingMode คืออะไร RoundingMode ก็คือโหมด หรือพฤติกรรมในการกำหนดการปัดเศษสำหรับตัวเลข

ก่อนที่เราจะใช้ class นี้ได้ เราจะต้อง import java.math.RoundingMode มาใช้ก่อนครับ

สำหรับ RoudingMode แต่ละแบบนั้น แสดงการปัดเศษแต่ละแบบตามตัวอย่างในตารางด้านล่าง

ตัวเลขเริ่มต้นผลลัพธ์ที่ได้จากการปัดเศษ แบบ RoudingMode แบบต่าง ๆ
UPDOWNCEILINGFLOORHALF_UPHALF_DOWNHALF_EVEN
5.5 6 5 6 5 6 5 6
2.5 3 2 3 2 3 2 2
1.6 2 1 2 1 2 2 2
1.1 2 1 2 1 1 1 1
1.0 1 1 1 1 1 1 1
-1.0 -1 -1 -1 -1 -1 -1 -1
-1.1 -2 -1 -1 -2 -1 -1 -1
-1.6 -2 -1 -1 -2 -2 -2 -2
-2.5 -3 -2 -2 -3 -3 -2 -2
-5.5 -6 -5 -5 -6 -6 -5 -6

RoundingMode.UP

Input Number Input rounded to one digit
with UP rounding
5.5 6
2.5 3
1.6 2
1.1 2
1.0 1
-1.0 -1
-1.1 -2
-1.6 -2
-2.5 -3
-5.5 -6

จากตาราง RoudingMode.UP จะปัดเศษขึ้นเสมอเมื่อมีเศษ ดูตัวอย่างวิธีการใช้ด้านล่าง แต่สังเกตดูให้ดี เมื่อจำนวนเป็นลบ ค่าที่ได้จะลดลง นั่นคือจะคิดจากตัวเลข บวกหรือลบไม่มีส่วน เพราะจะปัดขึ้นจากเลขเดิม 1 เสมอเมื่อมีเศษ
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.UP);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: UP         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("4.1 rounds to " + nf.format(4.1)); // output 4.1 rounds to 5         System.out.println("5.5 rounds to " + nf.format(5.5)); // output 5.5 rounds to 6         System.out.println();     } } 

RoundingMode.DOWN

Input Number Input rounded to one digit
with DOWN rounding
5.5 5
2.5 2
1.6 1
1.1 1
1.0 1
-1.0 -1
-1.1 -1
-1.6 -1
-2.5 -2
-5.5 -5

จากตาราง RoudingMode.DOWN จะปัดเศษลงเสมอเมื่อมีเศษ ดูตัวอย่างวิธีการใช้ด้านล่าง แต่สังเกตดูให้ดี เมื่อจำนวนเป็นลบ ค่าที่ได้จะเพิ่มขึ้น นั่นคือจะคิดจากตัวเลข บวกหรือลบไม่มีส่วน เพราะจะปัดลงจากเลขเดิม 1 เสมอเมื่อมีเศษ
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.DOWN);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: DOWN         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("4.1 rounds to " + nf.format(4.1)); // output 4.1 rounds to 4         System.out.println("5.5 rounds to " + nf.format(5.5)); // output 5.5 rounds to 5         System.out.println("5.9 rounds to " + nf.format(5.9)); // output 5.9 rounds to 5         System.out.println();     } } 

RoundingMode.CEILING

Input Number Input rounded to one digit
with CEILING rounding
5.5 6
2.5 3
1.6 2
1.1 2
1.0 1
-1.0 -1
-1.1 -1
-1.6 -1
-2.5 -2
-5.5 -5

จากตาราง RoudingMode.CEILING จะปัดเศษขึ้นเสมอเมื่อมีเศษ ดูตัวอย่างวิธีการใช้ด้านล่าง แต่สังเกตดูให้ดี เมื่อจำนวนเป็นลบ ค่าที่ได้จะเพิ่มขึ้น ซึ่งแตกต่างจาก UP สรุปก็คือ CEILING ก็คือขอบบนนั่นเอง
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.CEILING);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: CEILING         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("4.1 rounds to " + nf.format(4.1)); // output 4.1 rounds to 5         System.out.println("5.5 rounds to " + nf.format(5.5)); // output 5.5 rounds to 6         System.out.println("5.9 rounds to " + nf.format(5.9)); // output 5.9 rounds to 6         System.out.println();     } } 

RoundingMode.FLOOR

Input Number Input rounded to one digit
with FLOOR rounding
5.5 5
2.5 2
1.6 1
1.1 1
1.0 1
-1.0 -1
-1.1 -2
-1.6 -2
-2.5 -3
-5.5 -6

จากตาราง RoudingMode.FLOOR จะปัดเศษลงเสมอเมื่อมีเศษ ดูตัวอย่างวิธีการใช้ด้านล่าง แต่สังเกตดูให้ดี เมื่อจำนวนเป็นลบ ค่าที่ได้จะลดลง ซึ่งแตกต่างจาก Down สรุปก็คือ FLOOR ก็คือขอบล่างนั่นเอง
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.FLOOR);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: FLOOR         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("4.1 rounds to " + nf.format(4.1)); // output 4.1 rounds to 4         System.out.println("5.5 rounds to " + nf.format(5.5)); // output 5.5 rounds to 5         System.out.println("5.9 rounds to " + nf.format(5.9)); // output 5.9 rounds to 5         System.out.println();     } } 

RoundingMode.HALF_UP

Input Number Input rounded to one digit
with HALF_UP rounding
5.5 6
2.5 3
1.6 2
1.1 1
1.0 1
-1.0 -1
-1.1 -1
-1.6 -2
-2.5 -3
-5.5 -6

จากตาราง RoudingMode.HALF_UP จะปัดเศษขึ้นตั้งแต่เศษมีค่าเท่ากับ 5 ขึ้นไป แปรง่าย ๆ ก็คือ ครึ่งหนึ่งให้ปัดขึ้น
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.HALF_UP);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: HALF_UP         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("4.1 rounds to " + nf.format(4.1)); // output 4.1 rounds to 4         System.out.println("4.5 rounds to " + nf.format(4.5)); // output 4.5 rounds to 5         System.out.println("4.9 rounds to " + nf.format(4.9)); // output 4.9 rounds to 5         System.out.println();     } } 

RoundingMode.HALF_DOWN

Input Number Input rounded to one digit
with HALF_DOWN rounding
5.5 5
2.5 2
1.6 2
1.1 1
1.0 1
-1.0 -1
-1.1 -1
-1.6 -2
-2.5 -2
-5.5 -5

จากตาราง RoudingMode.HALF_DOWN จะปัดเศษขึ้นตั้งแต่เศษมีค่ามากกว่า 5 ขึ้นไป แปรง่าย ๆ ก็คือ ครึ่งหนึ่งให้ปัดลง
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.HALF_DOWN);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: HALF_DOWN         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("4.1 rounds to " + nf.format(4.1)); // output 4.1 rounds to 4         System.out.println("4.5 rounds to " + nf.format(4.5)); // output 4.5 rounds to 4         System.out.println("4.9 rounds to " + nf.format(4.9)); // output 4.9 rounds to 5         System.out.println();     } } 

RoundingMode.HALF_EVEN

Input Number Input rounded to one digit
with HALF_EVEN rounding
5.5 6
2.5 2
1.6 2
1.1 1
1.0 1
-1.0 -1
-1.1 -1
-1.6 -2
-2.5 -2
-5.5 -6

จากตาราง RoudingMode.HALF_EVEN จะปัดเศษโดยดูตัวข้างหน้า ซึ่งถ้าตัวข้างหน้าเป็นเลขคี่ จะปัดในรูปแบบของ HALF_UP แต่ถ้าข้างหน้าเป็นเลขคู่ จะปัดในรูปแบบของ HALF_DOWN
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.HALF_EVEN);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: HALF_EVEN         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("3.5 rounds to " + nf.format(3.5)); // output 4.1 rounds to 4         System.out.println("4.5 rounds to " + nf.format(4.5)); // output 4.5 rounds to 4         System.out.println("5.5 rounds to " + nf.format(5.5)); // output 4.9 rounds to 5         System.out.println();     } } 

RoundingMode.UNNECESSARY

Input Number Input rounded to one digit
with UNNECESSARY rounding
5.5 throw ArithmeticException
2.5 throw ArithmeticException
1.6 throw ArithmeticException
1.1 throw ArithmeticException
1.0 1
-1.0 -1
-1.1 throw ArithmeticException
-1.6 throw ArithmeticException
-2.5 throw ArithmeticException
-5.5 throw ArithmeticException

จากตาราง RoudingMode.HALF_EVEN จะปัดเศษเฉพาะการส่งข้อมูลมามีผลที่แน่นอนจึงปัดเศษที่ไม่จำเป็นทิ้ง เช่นปัดเลข 0 ที่ไม่จำเป็นออก ไม่งั้นแล้วจะมี Exception เกิดขึ้น
 import java.math.RoundingMode; import java.text.NumberFormat;  public class RoundingModeIndex {     public static void main(String[] args) {         NumberFormat nf = NumberFormat.getNumberInstance();         nf.setMaximumFractionDigits(0);         nf.setRoundingMode(RoundingMode.UNNECESSARY);         System.out.println("Default rounding mode: " + nf.getRoundingMode());         // output Default rounding mode: HALF_EVEN         System.out.println("4.0 rounds to " + nf.format(4.0)); // output 4.0 rounds to 4         System.out.println("4.1 rounds to " + nf.format(3.5));         // output java.lang.ArithmeticException:         // Rounding needed with the rounding mode being set to RoundingMode.UNNECESSARY     } }