加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java自定义类开达成四舍五入

发布时间:2021-11-20 17:03:43 所属栏目:教程 来源:互联网
导读:工作中经常用到浮点数的四舍五入,但Java类库中的Math类的rint()和round()两个方法并不能满足我们的所有需要,下面我们就自定义四舍五入类来满足实际工作中的需要。 public class RoundTool { /** * 浮点数的四舍五入 * @param value * @param dotNum * @ret

工作中经常用到浮点数的四舍五入,但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

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读