Java若要將浮點數,也就是原始型別為float
或double
的小數點部分做四捨五入,無條件進位及無條件捨去的做法如下。
使用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 則留言:
floar()為無條件捨去。
這裡打錯了,是floor()不是floar()
To 樓上:謝謝你的糾錯,已修正。
張貼留言