JAVA 의 double 또는 float 에 대한 부동 소수점 정밀도 계산 제어 방법

4482 단어 자바BlogUPGmail
★ ★ ★ 본 편 은 오리지널 입 니 다. 전 재 된 친 구 를 인용 해 야 합 니 다.http://stephen830.iteye.com/blog/260776 > 응원 해 주 셔 서 감사합니다!★★★
이 편 은 JAVA 에서 double 또는 float 의 부동 소수점 을 어떻게 정밀도 로 계산 하 는 지, JAVA 에서 다양한 매개 변 수 를 제공 하여 정밀도 의 서로 다른 제어 방식 을 실현 하 는 지 를 소개 한다.구체 적 인 예 는 다음 과 같다.

/*
 * Created on 2005-6-5
 * Author stephen
 * Email zhoujianqiang AT gmail DOT com
 * CopyRight(C)2005-2008 , All rights reserved.
 */
package com.soft4j.utility;

import java.math.BigDecimal;

/**
 *       (     )           .
 * 
 * float/double             : <br>
 * java.math.BigDecimal.ROUND_UP <br>
 * java.math.BigDecimal.ROUND_DOWN <br>
 * java.math.BigDecimal.ROUND_CEILING <br>
 * java.math.BigDecimal.ROUND_FLOOR <br>
 * java.math.BigDecimal.ROUND_HALF_UP<br>
 * java.math.BigDecimal.ROUND_HALF_DOWN <br>
 * java.math.BigDecimal.ROUND_HALF_EVEN <br>
 * 
 * @author stephen
 * @version 1.0.0
 */
public final class RoundTool {

    /**
     *  double       .
     * <p>
     * For example: <br>
     * double value = 100.345678; <br>
     * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br>
     * ret 100.3457 <br>
     * 
     * @param value
     *            double  .
     * @param scale
     *                (       ).
     * @param roundingMode
     *                  .
     * @return         .
     */
    public static double round(double value, int scale, int roundingMode) {
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(scale, roundingMode);
        double d = bd.doubleValue();
        bd = null;
        return d;
    }

    /**
     *     main  .
     * 
     * @param argc
     *                .
     */
    public static void main(String[] argc) {
        //      2     
    	
        //ROUND_UP
    	//   2       0   ,  2  +1
        System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35
        System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35
        //ROUND_DOWN
        // ROUND_UP  
        //     2        
        System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34
        System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34
        //ROUND_CEILING
        //    >0   ROUND_UP    
        //    <0   ROUND_DOWN    
        System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35
        System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34
        //ROUND_FLOOR
        //    >0   ROUND_DOWN    
        //    <0   ROUND_UP    
        System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34
        System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35
        //ROUND_HALF_UP [       ]
        //   3   >=5,  2   +1
        //  :   3     ,     3       
        System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35
        System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34
        System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35
        System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34
        //ROUND_HALF_DOWN
        //   3   >=5,  ROUND_UP
        //   3   <5,  ROUND_DOWN
        System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35
        System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34
        System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35
        System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34
        //ROUND_HALF_EVEN
        //   3    ,  ROUND_HALF_DOWN
        //   3    ,  ROUND_HALF_UP
        System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35
        System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35
    }
}


-------------------------------------------------------------
지식 을 나 누고 즐거움 을 나 누 며 글 이 필요 한 친구 에 게 작은 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기