如何將Java中的數字四捨五入到小數點後2位?三個實用技巧送給你

前言

四捨五入到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

如何將Java中的數字四捨五入到小數點後2位?三個實用技巧送給你

RoundingMode.HALF_UP:如果兩個鄰居的距離相同則向上舍入,例如2.5將舍入為3.0

如何將Java中的數字四捨五入到小數點後2位?三個實用技巧送給你

RoundingMode.HALF_EVEN:如果兩個鄰居等距,則向偶數舍入,例如2.5將舍入到2.0,而5.5將舍入到6.0

如何將Java中的數字四捨五入到小數點後2位?三個實用技巧送給你

還有其他一些舍入模式,例如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知音

推薦觀看:疫情下的機遇,阿里直招怒斬"P7"offer,自曝狂啃六遍的面試筆記

愈發火爆的微服務、分佈式,2020年Java程序員還學不會基本淘汰了


分享到:


相關文章: