BigDecimal 곱셈 문제

직접 제 코드와 결과로 문제를 설명해 주세요.
코드:
/**
 * Created by zhangx-ae on 2016/5/17.
 */
public class DemoTest {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal(1000000);
        BigDecimal b = a.multiply(new BigDecimal(0.21));
        System.out.println(b);
    }
}

결과:
209999.9999999999922284388276239042170345783233642578125000000

제가 원하는 결과는 21000.00입니다. 결과를 어떻게 처리해야 합니까?
실제로 이는 빅데시밀이 더블을 빅데시밀로 전환할 때 발생한 문제다. 0.21이 더블값을 정확하게 표시하지 못했기 때문이다. 빅데시밀을 사용하여 더블을 정확한 값으로 전환했을 때 얻은 결과는 0.20999999999999999999228438438823904217034578323642578125이기 때문에 곱하면 그 결과가 된다.
String을 BigDecimal로 전환할 때 문자열이 얼마인지, 결과가 얼마인지에 따라 Double 형식의 데이터를 BigDecimal로 전환하려면 이렇게 하는 것이 당신이 원하는 결과일 수도 있습니다.
BigDecimal b = new BigDecimal(String.valueOf(0.21));

결과:
210000.00

좋은 웹페이지 즐겨찾기