Java 精确四舍五入 并计算百分比

最初使用java.text.DecimalFormat;的方法总是不能精确四舍五入代码如下

 

private static DecimalFormat df = new DecimalFormat("##.00");

    //换算百分比
    private double toScale(double v) {
        double temp = v / sum;
        double v1 = Double.parseDouble(df.format((v / this.sum * 100)));
        return v1;
    }

 但这总方式换算0.3125 无法精确进行进位得到的结果是0.312 应该是0.313

 

后来改为java.math.BigDecimal;并手动截取需要进位的数字进行判断是否采取四舍五入完美解决

 

Double[] d = new Double[4];
        d[0] = 0.078125;
        d[1] = 0.3125;
        d[2] = 0.5703125;
        d[3] = 0.0390625;
 
        for (Double c : d) {
            BigDecimal a = new BigDecimal(c);
            String s = a.setScale(4, 1).toString();
            System.out.print("四舍五前" + s + "      ");
            Integer lastNum = Integer.valueOf(s.substring(s.length() - 1, s.length()));          //截取最后一位判断是否四舍五入
            System.out.print("截取需要进位数字" + lastNum + "      ");
            float v;
            if (lastNum >= 5) {
                v = Float.parseFloat(a.setScale(3, 2).toString());      //setScale前面的参数代表从小数点后的第几位换算 后面2就代表强制进位
                System.out.println("四舍五入后:" + v * 100);
 
                System.out.println("");
            } else {
                v = Float.parseFloat(a.setScale(3, 1).toString());       //这里后面1代表着不进位直接去除掉后面多余的余数
                System.out.println("四舍五入后:" + v * 100);
            }
            System.out.println("----------------------------------------------------------------");
        }

 

Have Fun!

你可能感兴趣的:(Java,细节)