การใช้ java.math.RoundingMode
รู้จักและใช้งาน java.math.RoundingMode
RoundingMode เป็นคลาส หนึ่ง ในคลาสมาตรฐานของ java ซึ่งอยู่ใน java.math.RoundingModeRoundingMode คืออะไร RoundingMode ก็คือโหมด หรือพฤติกรรมในการกำหนดการปัดเศษสำหรับตัวเลข
ก่อนที่เราจะใช้ class นี้ได้ เราจะต้อง import java.math.RoundingMode มาใช้ก่อนครับ
สำหรับ RoudingMode แต่ละแบบนั้น แสดงการปัดเศษแต่ละแบบตามตัวอย่างในตารางด้านล่าง
ตัวเลขเริ่มต้น | ผลลัพธ์ที่ได้จากการปัดเศษ แบบ RoudingMode แบบต่าง ๆ | ||||||
---|---|---|---|---|---|---|---|
UP | DOWN | CEILING | FLOOR | HALF_UP | HALF_DOWN | HALF_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 } }