保留指定小数

本文介绍了一个Java工具类,用于实现数值的小数位数保留功能。该工具类提供了对输入数值进行格式化的方法,能够根据指定的小数位数进行四舍五入,并确保结果的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.newcore.pcms.util;

/**
 * 
 * <p>Title: ReservedDecimal</p>
 * <p>Description: </p>
 * @author  MaRuifu
 * @date    2017年1月9日下午10:27:55
 */
public class ReservedDecimal {


    /**
     * 
     * <p>Title: reservedDecimal</p>
     * <p>Description: 保留小数位数,根据传入的保留小数的位数和所要和所要格式化的值 保留小数,最后一位是按照四舍五入来计算的</p>
     * @param len  保留小数
     * @param str 所要格式化的数值
     * @return   格式化后的数值
     * @throws Exception  保留小数位数抛出的异常
     */
    public static  String reservedDecimal(int len ,String str) {

        if(len>20){
            throw new NumberFormatException("保留小数不能保留超过20位!");
        }
        if(len<0){
            throw new NumberFormatException("保留小数不能为负数!");
        }
        if(str==null||"".equals(str)){
            throw new NumberFormatException("数字不能为空");
        }
        Double.valueOf(str);

        if(str.length()-str.indexOf(".")-len==1){
            return str;
        }
        if(len==0){
            if(str.indexOf(".")==-1){
                return str;
            }else{
                String sustr = str.substring(str.indexOf(".")+1, str.indexOf(".")+2);
                int suint = Integer.valueOf(sustr);
                if(suint>4){
                    String susta = str.substring(str.indexOf("."), str.indexOf(".")+1);
                    int suin = Integer.valueOf(susta)+1;
                    StringBuffer buf = new StringBuffer(str);
                    str=buf.replace(str.indexOf("."), str.indexOf(".")+1, String.valueOf(suin)).toString();
                    return str.substring(0, str.indexOf("."));
                }else{
                    return str.substring(0, str.indexOf("."));
                }

            }

        }
        if(str.indexOf(".")==-1){
            str=str+".";
        }
        int position = str.length() - (str.indexOf(".") + 1);
        if(position<len){
            int a = len-position;
            String stra = "";
            for (int j = 0; j < a; j++) {
                stra = stra+"0";
            }
            str = str+stra;
        }else{
            String sustr = str.substring(str.indexOf(".")+len+1, str.indexOf(".")+len+2);
            int suint = Integer.valueOf(sustr);
            if(suint>4){
                String susta = str.substring(str.indexOf(".")+len, str.indexOf(".")+len+1);
                int suin = Integer.valueOf(susta)+1;
                StringBuffer buf = new StringBuffer(str);

                str=buf.replace(str.indexOf(".")+len+0, str.indexOf(".")+len+1, String.valueOf(suin)).toString();
            }
        }
        return str.substring(0, str.indexOf(".")+len+1);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值