網頁

2019/5/28

Java 四捨五入,無條件進位,無條件捨去

Java若要將浮點數,也就是原始型別為floatdouble的小數點部分做四捨五入,無條件進位及無條件捨去的做法如下。

使用java.lang.Math類。
round()為四捨五入,
ceil()為無條件進位,
floor()為無條件捨去。

請見以下範例,注意round()的返回值型態為long

double d = 1.999;
System.out.println(Math.round(d)); // 2
System.out.println(Math.ceil(d));  // 2.0
System.out.println(Math.floor(d)); // 1.0

float f = 1.999f;
System.out.println(Math.round(f)); // 2
System.out.println(Math.ceil(f));  // 2.0
System.out.println(Math.floor(f)); // 1.0

如果要指定進位的小數點後指定位數,則先把原本要進位的數乘上10的指定位數方的double值,然後再除以該double值。

例如要四捨五入,無條件進位,無條件捨去至小數點後2位數,則把原本要進位的數乘上102 double也就是100.0,然後再除以100.0

double d = 1.234;

System.out.println(Math.round(d * 1.0) / 1.0);     // 1.0  四捨五入至小數點後 0 位
System.out.println(Math.round(d * 10.0) / 10.0);   // 1.2  四捨五入至小數點後 1 位
System.out.println(Math.round(d * 100.0) / 100.0); // 1.23 四捨五入至小數點後 2 位

System.out.println(Math.ceil(d * 1.0) / 1.0);      // 2.0  無條件進位至小數點後 0 位
System.out.println(Math.ceil(d * 10.0) / 10.0);    // 1.3  無條件進位至小數點後 1 位
System.out.println(Math.ceil(d * 100.0) / 100.0);  // 1.24 無條件進位至小數點後 2 位

System.out.println(Math.floor(d * 1.0) / 1.0);     // 1.0  無條件捨去至小數點後 0 位
System.out.println(Math.floor(d * 10.0) / 10.0);   // 1.2  無條件捨去至小數點後 1 位
System.out.println(Math.floor(d * 100.0) / 100.0); // 1.23 無條件捨去至小數點後 2 位

2 則留言:

  1. floar()為無條件捨去。
    這裡打錯了,是floor()不是floar()

    回覆刪除
  2. To 樓上:謝謝你的糾錯,已修正。

    回覆刪除