歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java自定義類開實現四捨五入

工作中經常用到浮點數的四捨五入,但Java類庫中的Math類的rint()和round()兩個方法並不能滿足我們的所有需要,下面我們就自定義四捨五入類來滿足實際工作中的需要。

public class RoundTool {


    /**

    * 浮點數的四捨五入

    * @param value

    * @param dotNum

    * @return

    */

    public static String round(double value,int dotNum){

        String strValue=String.valueOf(value);//轉換為字符串

        int pos=strValue.indexOf(".");//小數點位置

        int len=strValue.length();//數值總位數

        int dotLen=len-1-pos;//小數的位數

        double endValue=0.0;//保存運算結果的中間變量

        String endNum="";//保存最終結果的變量

        if(dotNum<dotLen){//需要保留的小數位數小於實現小數位數

            String cNum=strValue.substring(pos+dotNum+1,pos+dotNum+2);//獲得需要進位

            int iNum=Integer.valueOf(cNum);//轉換不整數

            String sNum=strValue.substring(0,pos+dotNum+1);//獲得需要保留的未進行捨入處理的數值

            endValue=Double.valueOf(sNum);//轉換為double型

            if(iNum>=5){//如果需要捨入的值大於等於5

                String endPos="";//存放需要進位的小數值

                String dotValue="";//連接小數點後的多個0

                for(int i=1;i<dotNum;i++){

                    dotValue=dotValue+"0";//將小數點後的多個0連接到一起

                }

                endPos="0."+dotValue+"1";//需要進位的小數值

                endValue=endValue+Double.valueOf(endPos);//四捨五入處理之後的值

                strValue=String.valueOf(endValue);//處理後的值轉換為字符串

                pos=strValue.indexOf(".");//小數點後的位置

                len=strValue.length();//數值總位數

                dotLen=len-1-pos;//小數的位數

                if(dotLen<dotNum){//如果小數位數不足,則補足位數

                    for(int i=pos+dotLen+1;i<pos+dotNum+1;i++){

                        endNum=String.valueOf(endValue)+"0";//補足小數位數

                    }

                }else{//如果小數位數正好,或超過要求,則進行截位處理

                    endNum=String.valueOf(endValue).substring(0,pos+dotNum+1);

                }

            }else{

                ;

                endNum=strValue.substring(0,strValue.indexOf("."))+

                        strValue.substring(strValue.indexOf("."),strValue.indexOf(".")+dotNum+1);

            }

        }else if(dotNum==dotLen){

            endNum=String.valueOf(value);//小數位數與要求的位數相同,直接轉換為字符串

        }else{//如果小數位數不足,則補足位數

            for(int i=1;i<=dotNum-dotLen;i++){

                strValue=strValue+"0";//補足小數位數

            }

            endNum=strValue;//最終值

        }

        return endNum;

    }

 


    public static void main(String[] args){

        System.out.println(RoundTool.round(123.121, 2));

        System.out.println(RoundTool.round(123.456789,3));

        System.out.println(RoundTool.round(123.5,3));

    }

}

程序運行結果:

123.12

123.45

123.500

Copyright © Linux教程網 All Rights Reserved