Java-소수점 세 번째 값을 기준으로 소수점 이하 두 자리로 반올림 [중복]

Dec 16 2020

나는 5 학년 학생처럼 생각하면서 하루 동안 여기에 앉아있다.

public class Tester 
{                                                          
    static String actualValue = "";
    private static DecimalFormat df2 = new DecimalFormat("#.##");  //To round off to two decimal places.
    static double regPrice = 0.0;
    static double regPrice2 = 0.0;
    
     public static void main(String[] args) 
     {
          regPrice2 = 1506.365;
          
          System.out.println("reg price 1 is: "+regPrice2);
          System.out.println("reg price 1 after rounding is is: "+round(regPrice2));
          
          regPrice = 8535.765;
          
          System.out.println("reg price  is: "+regPrice);
          System.out.println("reg price  after rounding is: "+round(regPrice));
      }
     
     public static double round(double value) 
        {         
            df2.setRoundingMode(RoundingMode.HALF_UP);
            String returnValue = df2.format(value);
            double actualValue = Double.parseDouble(returnValue);
            return actualValue;   
        }
    
}    
산출 값 1 가치 2
실제 1506.37 8535. 76
예상 1506.37 8535. 77

반올림이 첫 번째 숫자에는 작동하지만 두 번째 숫자에는 작동하지 않는 이유는 무엇입니까? 이 작업을 어떻게 할 수 있습니까?

답변

1 TomášZáluský Dec 16 2020 at 07:51

부동 소수점 표현 덕분에 1506.365 또는 8535.765가 실제로 예상보다 약간 크거나 작다고 생각하는 숫자입니다. 부동 소수점 숫자는 가수와 지수로 표시됩니다. 따라서 예를 들어 0.365 및 0.765 반올림은 다르게 수행됩니다. 반쪽 근처에서 반올림하면 임의의 방향으로 나타납니다. BigDecimal정확한 숫자가 필요한 경우 사용하십시오 .