반올림을 사용할 때 bigdecimal에서 다른 생성자를 사용하는 것의 차이점은 무엇입니까? 아래의 코드를 실행하는 경우 :BigDecimal 문자열과 (int, long, double) 생성자를 사용한 반올림 차이
public class RoundTest {
/**
* @param args
*/
public static void main(String[] args) {//2.425
BigDecimal intv = new BigDecimal(4.645);
BigDecimal doublev = new BigDecimal(4.645);
BigDecimal strV = new BigDecimal("4.645");
BigDecimal longV = new BigDecimal(4.645);
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_UP));
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Int - "+intv.setScale(2, RoundingMode.HALF_EVEN));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_UP));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Double -"+doublev.setScale(2, RoundingMode.HALF_EVEN));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_UP));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("String - "+strV.setScale(2, RoundingMode.HALF_EVEN));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_UP));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_DOWN));
System.out.println("Long - "+longV.setScale(2, RoundingMode.HALF_EVEN));
}
}
출력은 다음과 같습니다
Int - 4.64
Int - 4.64
Int - 4.64
Double -4.64
Double -4.64
Double -4.64
**String - 4.65**
String - 4.64
String - 4.64
Long - 4.64
Long - 4.64
Long - 4.64
이유는 문자열 생성자가 다른 사람과는 다른 결과를 제공하여 반올림는 무엇입니까? BigDecimal로 반올림을 사용할 때 더 많은 차이점이 있습니까?
'intv'와'longv'가있는 이유는 명확하지 않습니다. 모든 경우에'BigDecimal (double)'생성자를 호출하기 때문에'doublev'와 정확히 같습니다. –