JavaにおけるDouble計算の保持後の小数ビットのいくつかの方法

2548 ワード

Doubleタイプを返します
1.四捨五入
 	public static void main(String[] args) {
        double avg = avg(32.0, 20, 40);
        System.out.println(avg);//      :30.666666666666668
        avg = (double) Math.round(avg * 100) / 100;
        System.out.println(avg);//    :30.67
    }

    /**
     *     ,        
     */
    public static double avg(double... source) {
        double sum = 0;
        for (double s : source) {
            sum = sum + s;
        }
        return sum / source.length;
    }
  • BigDecimal.ROUND_HALF_UP表示四捨五入、BigDecimal.ROUND_HALF_DOWNも五舎六入、BigDecimal.ROUND_UPはキャリー処理(つまり1を直接加算)を表し、BigDecimal.ROUND_DOWNは直接端数を除くことを示す.
  • public static void main(String[] args) {
            double avg = avg(32.0, 20, 40);
            System.out.println(avg);//30.666666666666668
            //  BigDecimal
            BigDecimal b = new BigDecimal(avg);
            avg = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            System.out.println(avg);//30.67
        }
    
        /**
         *     ,        
         */
        public static double avg(double... source) {
            double sum = 0;
            for (double s : source) {
                sum = sum + s;
            }
            return sum / source.length;
        }
    

    Stringタイプを返す
    1.#0.00は保留後の2桁を表し、その処理方式は不要な末尾数を直接切り取り、四捨五入しない.
    public static void main(String[] args) {
            double avg = avg(32.0, 20, 40);
            System.out.println(avg);//30.666666666666668      
            //3.#.00       ,                ,     。
            DecimalFormat data=new DecimalFormat("#.00");
            String str=data.format(avg);
            System.out.println(avg);//30.666666666666668
        }
    

    2.%2 fは保留後の2桁を表し、四捨五入できる.
     public static void main(String[] args) {
            double avg = avg(32.0, 20, 40);
            System.out.println(avg);//30.666666666666668
            // %.2f       ,     。
            String str = String.format("%.2f", avg);
            System.out.println(str);//30.67
        }
    

    .RoundingMode.HALF_DOWNは五捨六入を表し、負数は絶対値を取ってから五捨六入してから負数を表し、RoundingMode.HALF_UP:四捨五入、負数は絶対値を取ってから五捨六入してから負数を表す.
    public static void main(String[] args) {
            double avg = avg(32.0, 20, 40);
            System.out.println(avg);//30.666666666666668 
            NumberFormat data=NumberFormat.getCurrencyInstance();
            //      
            data.setMaximumFractionDigits(2);
            //          ,    RoundingMode.DOWN
            data.setRoundingMode(RoundingMode.UP);
            System.out.println(data.format(avg));//¥30.67
        }