다음 결과가 필요합니다
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
.round()
또는 .setScale()
? 어떻게해야합니까?
답변
를 사용 setScale()
하여 소수 자릿수를 0으로 줄일 수 있습니다 . value
반올림 할 값이 있다고 가정 합니다.
BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP);
System.out.println(value + " -> " + scaled);
round()
보유 할 자릿수를 지정해야하므로 사용 은 조금 더 복잡합니다. 귀하의 예에서 이것은 3이지만 모든 값에 유효하지는 않습니다.
BigDecimal rounded = value.round(new MathContext(3, RoundingMode.HALF_UP));
System.out.println(value + " -> " + rounded);
( BigDecimal
객체는 변경할 수 없으며 setScale
및 둘 다 round
새 객체를 반환합니다.)
답변
Grodriguez의 대답으로 가면
System.out.println("" + value);
value = value.setScale(0, BigDecimal.ROUND_HALF_UP);
System.out.println("" + value);
이것은 출력입니다
100.23 -> 100
100.77 -> 101
내가 원하는 게 아니니까 결국 이거 ..
System.out.println("" + value);
value = value.setScale(0, BigDecimal.ROUND_HALF_UP);
value = value.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("" + value);
이것이 내가 얻는 것
100.23 -> 100.00
100.77 -> 101.00
이것은 지금 내 문제를 해결합니다 .. 🙂 모두 감사합니다.
답변
매우 복잡한 솔루션이 있지만 작동합니다.
public static BigDecimal roundBigDecimal(final BigDecimal input){
return input.round(
new MathContext(
input.toBigInteger().toString().length(),
RoundingMode.HALF_UP
)
);
}
테스트 코드 :
List<BigDecimal> bigDecimals =
Arrays.asList(new BigDecimal("100.12"),
new BigDecimal("100.44"),
new BigDecimal("100.50"),
new BigDecimal("100.75"));
for(final BigDecimal bd : bigDecimals){
System.out.println(roundBigDecimal(bd).toPlainString());
}
산출:
100
100
101
101
답변
다음을 살펴보십시오.
http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#ROUND_HALF_UP
과:
setScale(int precision, int roundingMode)
또는 Java 6을 사용하는 경우
http://download.oracle.com/javase/6/docs/api/java/math/RoundingMode.html#HALF_UP
http://download.oracle.com/javase/6/docs/api/java/math/MathContext.html
그리고 다음 중 하나 :
setScale(int precision, RoundingMode mode);
round(MathContext mc);
답변
나는 당신이 단일 명령으로 그렇게 반올림 할 수 있다고 생각하지 않습니다. 시험
ArrayList<BigDecimal> list = new ArrayList<BigDecimal>();
list.add(new BigDecimal("100.12"));
list.add(new BigDecimal("100.44"));
list.add(new BigDecimal("100.50"));
list.add(new BigDecimal("100.75"));
for (BigDecimal bd : list){
System.out.println(bd+" -> "+bd.setScale(0,RoundingMode.HALF_UP).setScale(2));
}
Output:
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
나머지 예제를 테스트했으며 원하는 값을 반환하지만 정확성을 보장하지는 않습니다.
답변
원하는
round(new MathContext(0)); // or perhaps another math context with rounding mode HALF_UP