前言
四捨五入到2或3個小數位是我們Java程序員日常開發中肯定會遇到。幸運的是,Java API提供了幾種在Java中舍入數字的方法
我們可以使用Math.round(),BigDecimal或DecimalFormat將Java中的任何浮點數四捨五入到n個位置。我個人更喜歡使用BigDecimal在Java中四捨五入任何數字,因為它具有便捷的API並支持多種舍入模式。另外,如果您在金融行業工作,最好使用BigDecimal進行貨幣計算。
舍入數字時要記住的重要事項之一是舍入模式。舍入模式決定了如何捨棄丟棄的分數,瞭解諸如HALF DOWN,HALF UP和HALF EVEN之類的流行舍入模式肯定會有所幫助。
相關知識點
1.Java中的舍入模式
在四捨五入之前要知道的重要一點是四捨五入模式。通常,程序員認為,如果最後一位小於5,則捨去,如果最後一位大於5,則舍入;
舍入模式決定應如何舍入最低有效位。 BigDecimal類具有定義為整數常量的舍入模式,此模式後來被Java 1.5中的RoundingMode枚舉所取代。以下是一些要記住的重要RoundingMode:
RoundingMode.HALF_DOWN:如果兩個鄰居等距,則向下舍入,例如2.5將舍入為2.0
RoundingMode.HALF_UP:如果兩個鄰居的距離相同則向上舍入,例如2.5將舍入為3.0
RoundingMode.HALF_EVEN:如果兩個鄰居等距,則向偶數舍入,例如2.5將舍入到2.0,而5.5將舍入到6.0
還有其他一些舍入模式,例如UP,DOWN,FLOOR和CEILING,這也是值得了解的。
2.使用BigDecimal將數字四捨五入到小數點後兩位
每當我需要將數字四捨五入到小數點後n位時,我首先想到的是BigDecimal。 BigDecimal不僅允許您選擇RoundingMode,而且使用BigDecimal方法將數字四捨五入到任何小數位都很容易。這是一個將數字四捨五入到小數點後兩位的示例:
<code>package com.milo.base.sort; import org.junit.Test; import java.math.BigDecimal; /** * 測試BigDecimal的Api * @author milogenius * @date 2020-04-14 19:49 */ public class BigDecimalTest { @Test public void test1(){ float number = BigDecimal.valueOf(4.526f) .setScale(2, BigDecimal.ROUND_HALF_DOWN) .floatValue(); System.out.println(number); } } ---------------------------------------------- Output: 4.53/<code>
在setScale()中,您可以指定需要舍入的小數位數,在這裡,我們將小數位數設置為2,因為我們將舍入到2位數字。我們指定舍入模式ROUND_HALF_DOWN,類似於RoundingMode.HALF_DOWN。您也可以使用RoundingMode.HALF_DOWN來代替
BigDecimal.ROUND_HALF_DOWN,但是要注意,從Java 5開始添加了RoundingMode枚舉。
3.使用DecimalFormat將數字四捨五入到小數點後兩位
如果僅出於顯示目的四捨五入數字,則應考慮使用DecimalFormat或String``格式方法類。儘管使用BigDecimal舍入數字沒有錯,但DecimalFormat似乎是格式化數字的正確類。
這是Java代碼,使用Java中的DecimalFormat將數字四捨五入到2位有效數字。
<code> @Test public void test2(){ DecimalFormat df = new DecimalFormat("#.00"); float number = Float.valueOf(df.format(4.526f)); System.out.println(number); } ---------------------------------------------- Output: 4.53/<code>
#.00用於四捨五入到小數點後兩位,如果要四捨五入到小數點後第三位,只需使用#.000或#.0000來創建DecimalFormat。要了解有關格式化數字的更多信息,請參見如何使用DecimalFormat在Java中格式化數字。
4.使用Math.round()在Java中進行舍入運算
Math.round()是Java中舍入數字的經典方法。儘管它沒有提供任何API來指定要舍入的位數,但是通過使用乘法和除法,您可以將其舍入到n或2個小數位。
順便說一句,這不是Java中舍入數字的首選方法,我更喜歡BigDecimal,但仍然是舍入數字的便捷方法,並且可以在許多情況下使用。這是在Java中如何使用Math.round()函數將數字四捨五入到2位數字的方法。
<code> @Test public void test3(){ float rounded = (float) Math.round(4.526f*100)/100; System.out.println(rounded); } ---------------------------------------------- Output: 4.53/<code>
如果需要四捨五入到小數點後五位,我們乘以100來四捨五入,然後乘以100000。順便說一句,Java的最佳實踐是優先使用BigDecimal而不是Math.round()來對Java中的數字進行四捨五入
綜合案例
這是一個Java綜合案例,它結合了以上3種方法,可以將Java中的任何數字四捨五入到小數點後兩位。您可以將程序更改為最多三位,四位或任意位數。
<code>package com.milo.base.sort; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.Arrays; /** * 使用三種方式演示java中保留2位小數 * 包括 BigDecimal, * Math.round and DecimalFormat class. * @author milogenius */ public class RoundingNumbers { public static void main(String args[]) { //數據 float[] samples = new float[]{2.123f, 2.125f, 2.127f}; //使用 Match.round()保留2位小數 float[] rounded = round(samples); System.out.println("開始舍入, numbers: " + Arrays.toString(samples)); System.out.println("結束舍入 : 使用Match.round()方法 " + Arrays.toString(rounded)); //使用BigDecimal保留2位小數 //我們可以使用不同的舍入模式e.g., HALF_UP, HALF_DOWN,and HALF_EVEN with BigDecimal rounded = roundUsingBigDecimal(samples); System.out.println("開始舍入,numbers : " + Arrays.toString(samples)); System.out.println("結束舍入, number 使用 BigDecimal: " + Arrays.toString(rounded)); //DecimalFormat Example to round number to 2 digits //使用DecimalFormat來保留2位小數 rounded = roundUsingDecimalFormat(samples); System.out.println("開始舍入numbers: " + Arrays.toString(samples)); System.out.println("結束舍入,使用DecimalFormat: " + Arrays.toString(rounded)); } /** * 使用 Math.round保留2為小數 * @param numbers * @return */ public static float[] round(float[] numbers) { float[] round = new float[numbers.length]; for (int i = 0; i /<code>
總結(求轉發關注)
綜上所述,就是如何在Java中將數字四捨五入到小數點後2位。我們已經看到3種在Java中舍入數字的方法,例如BigDecimal,DecimalFormat和Math.round()。由於便捷的API和對不同舍入模式的支持,BigDecimal看起來是舍入數字的最佳方法。
END
來源:公眾號Java知音