|
ไอที |
Java |
15484
รู้จักและใช้งาน java.math.RoundingMode
RoundingMode เป็นคลาส หนึ่ง ในคลาสมาตรฐานของ java ซึ่งอยู่ใน java.math.RoundingMode
RoundingMode คืออะไร 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
}
}