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



Java自定义类开实现四舍五入,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。