如何自定义实现数值的四舍五入?

时间:2021-02-19 09:44:20
class RoundTool
{
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="";
        //链接小数点后的多个零
        for (int i=1;i<dotNum;i++ )
        {  dotValue=dotValue+"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)
    {
RoundTool r=new RoundTool();
        System.out.println(r.round(123.121,5));
    }
}