mapToDouble.sum的精度丢失问题

需要四舍五入一下

package cn.***;
 
import java.math.RoundingMode;
import java.text.DecimalFormat;
 
/**
 * 小数位获取
 */
public class DecimalAcquisition {
 
    public static void main(String[] args) {
 
        /** 常量:测试取精度 */
        double pai = 3.141592657589;
 
        /** 常量:测试四舍五入 */
        double num = 3.555555555555;
 
        /**
         * 第一种方案
         * 保留两位小数,四舍五入
         */
        DecimalFormat b = new DecimalFormat("#.00");
 
        // 两位精度处理测试
        String s = b.format(pai);
        System.out.println(s); // 3.14
 
        // 是否四舍五入测试
        String s1 = b.format(num);
        System.out.println(s1); // 3.56
 
 
        /**
         * 第二种方案(全面,可配置)
         * 保留两位小数,四舍五入
         * 通过setMaximumFractionDigits设置具体的几进位。
         * 通过setRoundingMode设置进位机制{
         *     RoundingMode.HALF_UP 四舍五入,负数先取绝对值再四舍五入再负数
         *     RoundingMode.CEILINGZ    取右边最近的整数
         *     RoundingMode.DOWN    去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整
         *     RoundingMode.FLOOR   取左边最近的正数
         *     RoundingMode.HALF_DOWN   五舍六入,负数先取绝对值再五舍六入再负数
         *     RoundingMode.HALF_EVEN   整数位若是奇数则四舍五入,若是偶数则五舍六入
         * }
         */
        DecimalFormat decimalFormat = new DecimalFormat();
        decimalFormat.setMaximumFractionDigits(2); // 保留两位小数
        decimalFormat.setRoundingMode(RoundingMode.HALF_UP); // 设置具体的进位机制
        Double aDouble = Double.valueOf(decimalFormat.format(pai));
        Double aDouble1 = Double.valueOf(decimalFormat.format(num));
        System.out.println(aDouble); // 3.14
        System.out.println(aDouble1); // 3.56
 
    }
}

你可能感兴趣的:(java3,java)