2013-05-09 2 views
0

다음 번호가 포함 된 m_FOBST이라는 속성이 있습니다 : 1.5776. 여기에 나는 그것을 반올림하기 위해 노력하고있어 : 내가 1.58를 받고되어야 할 때Java에서 BigDecimal을 반올림해도 예상되는 숫자가 반환되지 않습니다.

this.m_FOBST.setScale(2, BigDecimal.ROUND_HALF_EVEN) 

는 그러나, 나는 수 1.60를 얻을.

이유를 설명 할 수 있습니까?

+1

, 내가 얻을 : 당연 000> D = 새의 BigDecimal를 ("1.5776") ===> 당연 1.5776 : 000> d1 = d.setScale (2, BigDecimal.ROUND_HALF_EVEN) ===> 1.58 –

+0

스케일을 3으로 설정해보십시오. – wchargin

+0

참조 http://araklefeistel.blogspot.com/2011/06/javamathbigdecimal-difference-between.html?m=1 – wchargin

답변

4

BigDecimal은 변경할 수 없습니다. setScale() 메서드에서 반환 한 값을 사용하고 있는지 확인하십시오. 이 경우

BigDecimal bd = new BigDecimal("1.5776"); 

bd = bd.setScale(2, BigDecimal.ROUND_HALF_EVEN); 

bd가 I이 복제 할 수 1.58

+2

그는 대답이 1.60이고 BigDecimal은 기본적으로 아무 것도 말하지 않는다고 말했기 때문에 아마도 그렇습니다. –

+4

부동 소수점 숫자에서 BigDecimal을 생성 할 때는 항상'String' 생성자를 사용해야합니다. – Keppil

+0

@Keppil 왜 그런 말을하니? – sdoca