질문 : Java에서 소수점 이하 n 자리로 숫자를 반올림하는 방법
내가 원하는 것은 half-up 방법을 사용하여 반올림하는 문자열로 double을 변환하는 방법입니다. 즉, 반올림 할 소수점이 5이면 항상 다음 숫자로 반올림됩니다. 이것은 대부분의 상황에서 대부분의 사람들이 기대하는 반올림의 표준 방법입니다.
또한 유효 숫자 만 표시하고 싶습니다. 즉, 뒤에 0이 없어야합니다.
이 작업을 수행하는 한 가지 방법은 String.format
메서드를 사용하는 것입니다.
String.format("%.5g%n", 0.912385);
보고:
0.91239
훌륭하지만 중요하지 않더라도 항상 소수점 이하 5 자리로 숫자를 표시합니다.
String.format("%.5g%n", 0.912300);
보고:
0.91230
DecimalFormatter
를 사용하는 것입니다.
DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);
보고:
0.91238
그러나 보시다시피 반올림을 사용합니다. 즉, 이전 숫자가 짝수이면 내림됩니다. 내가 원하는 것은 다음과 같습니다.
0.912385 -> 0.91239
0.912300 -> 0.9123
Java에서 이것을 달성하는 가장 좋은 방법은 무엇입니까?
답변
setRoundingMode
를 사용하고 RoundingMode
명시 적으로 설정하여 반짝 수 라운드 문제를 처리 한 다음 필요한 출력에 형식 패턴을 사용합니다.
예:
DecimalFormat df = new DecimalFormat("#.####");
df.setRoundingMode(RoundingMode.CEILING);
for (Number n : Arrays.asList(12, 123.12345, 0.23, 0.1, 2341234.212431324)) {
Double d = n.doubleValue();
System.out.println(df.format(d));
}
출력을 제공합니다.
12
123.1235
0.23
0.1
2341234.2125
편집 : 원래 대답은 이중 값의 정확성을 다루지 않습니다. 반올림하든 내림하든별로 신경 쓰지 않으면 괜찮습니다. 그러나 정확한 반올림을 원하면 값의 예상 정확도를 고려해야합니다. 부동 소수점 값은 내부적으로 이진 표현을 사용합니다. 이는 2.7735와 같은 값이 실제로 내부적으로 정확한 값을 가지고 있지 않음을 의미합니다. 약간 더 크거나 약간 작을 수 있습니다. 내부 값이 약간 더 작 으면 2.7740으로 반올림되지 않습니다. 이러한 상황을 해결하려면 작업중인 값의 정확성을 인식하고 반올림하기 전에 해당 값을 더하거나 빼야합니다. 예를 들어 값이 최대 6 자리까지 정확하다는 것을 알고있는 경우 값을 반올림하려면 해당 정확도를 값에 추가합니다.
Double d = n.doubleValue() + 1e-6;
반올림하려면 정확도를 뺍니다.
출처 : https://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in-java
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
JavaScript 객체에서 키를 제거하는 방법 (0) | 2021.12.07 |
---|---|
다른 JavaScript 파일에 JavaScript 파일 포함하는 방법 (0) | 2021.12.07 |
Java 인터페이스에서 static 메소드를 정의 하는 방법 (0) | 2021.12.06 |
IDEA : javac : source release 1.7 requires target release 1.7 (0) | 2021.12.06 |
instanceof와 Class.isAssignableFrom (…)의 차이점 (0) | 2021.12.06 |