[java] Java에서 소수점 이하 두 자리까지만 두 배로자를 수 있습니까?

예를 들어 3.545555555 변수가 있는데 3.54로 자르고 싶습니다.



답변

표시 목적으로 원하는 경우 다음을 사용하십시오 java.text.DecimalFormat.

 new DecimalFormat("#.##").format(dblVar);

계산에 필요한 경우 다음을 사용하십시오 java.lang.Math.

 Math.floor(value * 100) / 100;


답변

DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);

사용 가능한 확인 RoundingModeDecimalFormat.


답변

Bit Old Forum, 위의 답변 중 어느 것도 양수와 음수 값 모두에 대해 작동하지 않았습니다 (나는 계산을 의미하고 반올림하지 않고 자르기를 의미합니다). 로부터 어떻게 자바에서 n 개의 소수 자릿수로 숫자를 반올림하는 링크

private static BigDecimal truncateDecimal(double x,int numberofDecimals)
{
    if ( x > 0) {
        return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_FLOOR);
    } else {
        return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_CEILING);
    }
}

이 방법은 나를 위해 잘 작동했습니다.

System.out.println(truncateDecimal(0, 2));
    System.out.println(truncateDecimal(9.62, 2));
    System.out.println(truncateDecimal(9.621, 2));
    System.out.println(truncateDecimal(9.629, 2));
    System.out.println(truncateDecimal(9.625, 2));
    System.out.println(truncateDecimal(9.999, 2));
    System.out.println(truncateDecimal(-9.999, 2));
    System.out.println(truncateDecimal(-9.0, 2));

결과 :

0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00


답변

참고 먼저 그 double진 부분이며, 정말하지 않습니다 소수점을.

당신이 장소를 진수 필요 경우 사용 BigDecimal이있는, setScale()잘라 내기위한 방법 또는 사용 DecimalFormat를 얻을 수를 String.


답변

어떤 이유로, 당신이 사용하지 않는 경우, BigDecimal당신은 당신을 캐스팅 할 수 double에은 int을 절단합니다.

Ones 위치 로 자르려면 다음을 수행하십시오 .

  • 단순히 캐스팅 int

받는 사람 소수점 첫째 자리의 장소 :

  • 10을 곱하다
  • 캐스트 int
  • 다시 캐스팅 double
  • 10으로 나눕니다.

Hundreths 플레이스

  • 100으로 곱하고 나눕니다.

예:

static double truncateTo( double unroundedNumber, int decimalPlaces ){
    int truncatedNumberInt = (int)( unroundedNumber * Math.pow( 10, decimalPlaces ) );
    double truncatedNumber = (double)( truncatedNumberInt / Math.pow( 10, decimalPlaces ) );
    return truncatedNumber;
}

이 예에서, decimalPlaces사람은 당신이 가고 싶은 이후 자리의 자릿수가 될 것이다, 그렇게 한 것 라운드에 에바의 장소, 2에 백분 등 (0으로 라운드에 사람의 장소, 그리고 수십 부정적 일 등)


답변

문자열로 형식을 지정하고 다시 double로 변환하면 원하는 결과를 얻을 수 있습니다.

double 값은 round (), floor () 또는 ceil ()이 아닙니다.

이에 대한 빠른 수정은 다음과 같습니다.

 String sValue = (String) String.format("%.2f", oldValue);
 Double newValue = Double.parseDouble(sValue);

표시 목적으로 sValue를 사용하거나 계산을 위해 newValue를 사용할 수 있습니다.


답변

어쩌면 Math.floor(value * 100) / 100? 같은 값 3.54double.