0
아래의 경우 BigDecimals가 잘못된 결과를 출력하는 이유를 아는 사람이 있습니까?BigDecimal 잘못된 값
double a = 2400;
double b = 3600;
double c = 8;
MathContext mc = new MathContext(14);
BigDecimal aa = new BigDecimal(2400);
BigDecimal bb = new BigDecimal(3600);
BigDecimal cc = new BigDecimal(8);
System.out.println("Doubles: " + (a/b*c));
System.out.println("Big Ds: " + (aa.divide(bb, mc).multiply(cc)));
출력 :
Doubles: 5.333333333333333
Big Ds: 5.33333333333336
생각과 아이디어를 환영합니다.
Base-2 (double) 대 Base-10 (BigDecimal) 바이너리 표현. 다양한 종류의 반올림 오류. –
10 진수의 1/3 또는 2 진수의 0.1을 정확히 나타낼 수 없습니다. BigDecimal 또는 다른 클래스가 그것을 변경했다고 상상하는 것은 잘못입니다. – duffymo
나누기에 대해 소수 자릿수 14 자리를 지정 했으므로 그 자리에있는 모든 나누기 오류에 8을 곱합니다. – EJP