본문 바로가기
자바

소수점 2 자리의 두 곳을 둥글게하십시오

by º기록 2021. 4. 16.
반응형

값이 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

 

 

반응형

댓글