四舍五入以及小数点的切割

1. 小数点的切割

之前用到java的切割split切割小数点报错,后来发现不能直接写str.split(“.”),要写为str.split(“\.”),
2. 下面给出四舍五入的java代码:

/**
     * 四舍五入保留小数,其实更快的算法是字符串截取,截取小数点后面的指定位数的小数个数就行,
     * 具体是substring方法,写这个四舍五入算法有点多此一举 ,但是精度比截取高一点,更快的四舍五入是使用数据库,
     * 但是作为一个小程序,那样操作比较麻烦,这里的四舍五入只是进位或者不进,对于小数位只有2位,却要保留3个
     * 小数位的这种情况,并没有在后面补0,比如 数据时12.09,但要保留3位小数,此处输入是12.09,不是12.090,
     * 
     * @param str
     *            要操作的数
     * @param pointN
     *            保留的位数
     */
    public static String roundMethod(String str, int pointN) {

        String result;// 用于存储返回值
        boolean min = false;// 判断是否是负数
        if (str.contains("-")) {
            min = true;
            str = str.split("-")[1];
        }

        boolean containPoint = str.contains(".");// 判断是否包含小数点,
        // 小数位
        int numDecimal = 0;
        if (containPoint) {
            // 必须以\\.分隔否则报错
            numDecimal = (str.split("\\.")[1]).length();
        }

        // 如果小数位小于要保留的位数,比如小数位只有2位,但是保留4位小数位,直接输入给定的数即可
        if (numDecimal <= pointN) {

            result = str;
        } else {
            // 小数位大于要保留的小数位,比如保留2位,再第三位加5进位,比如12.892,第三位是2加5不够进位,这样达到四舍五入的效果,比如12.895,保留2位小数是12.90,12.895+0.005可以达到进位的效果
            StringBuffer sbBuffer = new StringBuffer("1");
            for (int i = 0; i <= pointN; i++) {
                sbBuffer.append("0");
            }
            double add = 5.0 / Integer.parseInt(sbBuffer.toString());
            double resu = Double.parseDouble(str) + add;
            result = String.valueOf(resu).substring(0,
                    (String.valueOf(resu)).lastIndexOf(".") + pointN + 1);

        }
        // 如果是负数,把负号加上
        if (min) {
            result = "-" + result;
        }
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值