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
정확한 숫자가 필요한 경우 사용하십시오 .