반응형
값이 200.3456
인 경우 200.34
로 포맷해야합니다.
200
인 경우 200.00
여야합니다.
해결 방법
라운드 ( 대신 대신 대신 대신 대신 대신) 유틸리티가 있습니다.
예 :
round(200.3456, 2); // returns 200.35
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
나는 위의 "너무 큽니다"라운드를 수년 동안 행복하게 2 ~ 3 명의 소수점으로 두 배로 옮겨갔습니다.그러나보다 신뢰할 수있는 방법이 쉽게 사용할 수 있기 때문에 더 신뢰할 수있는 방법이 있으므로 최선을 다합니다.
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = BigDecimal.valueOf(value);
bd = bd.setScale(places, RoundingMode.HALF_UP);
return bd.doubleValue();
}
물론, 당신이 선호하는 경우, 위의 일을 하나의 라이너로 인라인 할 수 있습니다 :
new bigdecimal (값) .setscale (places, loundingmode.half_up) .doubleValue ()
float
및 double
를 사용하여 부동 소수점 표현이 부정확 한 을 사용하는 것을 항상 기억하십시오.
예를 들어, 이러한 표현식을 고려하십시오.
999199.1231231235 == 999199.1231231236 // true
1.03 - 0.41 // 0.6200000000000001
System.out.println(new BigDecimal(1.03).subtract(new BigDecimal(0.41)));
System.out.println(new BigDecimal("1.03").subtract(new BigDecimal("0.41")));
몇 가지 주제에 대한 탁월한 읽기 :
엄격하게 반올림하는 대신 (또는 추가) 대신 포맷 문자열을 원한다면 다른 답변을 참조하십시오.
참조 페이지 https://stackoverflow.com/questions/2808535
반응형
'자바' 카테고리의 다른 글
문자열에서 char의 발생 횟수를 계산하려면 어떻게합니까? (0) | 2021.04.16 |
---|---|
속성 별 사용자 정의 객체의 ArrayList 정렬 (0) | 2021.04.16 |
새 요소를 배열에 추가하는 방법은 무엇입니까? (0) | 2021.04.16 |
Java에서 다른 생성자를 어떻게 호출합니까? (0) | 2021.04.14 |
SerialVersionUID는 무엇이며 왜 그것을 사용해야합니까? (0) | 2021.04.14 |
댓글