programing

Java에서 소수점 이하 두 자리만 자르는 방법은 무엇입니까?

shortcode 2022. 9. 13. 22:28
반응형

Java에서 소수점 이하 두 자리만 자르는 방법은 무엇입니까?

예를 들어 변수 3.54555555는 3.54로 잘라냅니다.

표시용으로 사용하는 경우는, 다음과 같이 합니다.

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

계산에 필요한 경우 다음을 사용합니다.

 Math.floor(value * 100) / 100;
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);

[ Available ]및 을 체크합니다.

다른 답변은 양수값과 음수값 모두에 해당되지 않았습니다(계산 및 반올림 없이 "트렁크"를 수행한다는 의미).스트링으로 변환하지 않습니다.

Java의 소수점 이하 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분의 1 자리:

  • 10을 곱하다
  • 에 던지다.int
  • 로 되돌아가다.double
  • 10으로 나눕니다.

훈드레스 장소

  • 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가고 싶은 곳을 지난 자리 수가 되므로 1은 10분의 1, 2는 100분의 1로 반올림됩니다(0은 1로 반올림, 마이너스 1은 10으로 반올림 등).

문자열로 포맷하고 더블로 변환하면 원하는 결과를 얻을 수 있을 것 같습니다.

이중값은 round(), floor() 또는 ceil()이 되지 않습니다.

이를 위한 빠른 해결 방법은 다음과 같습니다.

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

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

번호를 사용할 수 있습니다.작업을 수행하기 위해 클래스 개체를 포맷합니다.

// Creating number format object to set 2 places after decimal point
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);            
nf.setGroupingUsed(false);

System.out.println(nf.format(precision));// Assuming precision is a double type variable

3.54555555가 3.54가 됩니다.이를 위해 다음을 시도해 보십시오.

    DecimalFormat df = new DecimalFormat("#.##");

    df.setRoundingMode(RoundingMode.FLOOR);

    double result = new Double(df.format(3.545555555);

= 3.54!

아마도요.Math.floor(value * 100) / 100? 다음과 같은 가치관에 주의해 주십시오.3.54로는 정확하게 표현되지 않을 수 있다double.

사용하는 방법은 다음과 같습니다.

double a=3.545555555; // just assigning your decimal to a variable
a=a*100;              // this sets a to 354.555555
a=Math.floor(a);      // this sets a to 354
a=a/100;              // this sets a to 3.54 and thus removing all your 5's

이 작업은 다음과 같이 수행할 수도 있습니다.

a=Math.floor(a*100) / 100;

다음과 같은 경우가 있습니다.

double roundTwoDecimals(double d) { 
      DecimalFormat twoDForm = new DecimalFormat("#.##"); 
      return Double.valueOf(twoDForm.format(d));
}  

간단한 체크는 Math.floor 방법을 사용하는 것입니다.아래 소수점 이하 2자리 이하를 더블 체크하는 방법을 만들었습니다.

public boolean checkTwoDecimalPlaces(double valueToCheck) {

    // Get two decimal value of input valueToCheck 
    double twoDecimalValue = Math.floor(valueToCheck * 100) / 100;

    // Return true if the twoDecimalValue is the same as valueToCheck else return false
    return twoDecimalValue == valueToCheck;
}
      double value = 3.4555;
      String value1 =  String.format("% .3f", value) ;
      String value2 = value1.substring(0, value1.length() - 1);
      System.out.println(value2);         
      double doublevalue= Double.valueOf(value2);
      System.out.println(doublevalue);

Math.floor() 메서드와 소수점 이하 기본 이동(100 = 2)을 사용했습니다.

//3.545555555 to 3.54 by floor method
double x = 3.545555555;
double y = Math.floor(x * 100); //354
double z = y / 100; //3.54

double firstValue = -3.1756d;

double value1 = ((int)(Math.pow(10,3)*firstValue)/Math.pow(10,3);

이 솔루션에서는 소수점 이하 두 자리까지만 두 자리 잘라냅니다.이 솔루션으로는 두 배의 값을 반올림할 수 없습니다.

double myDoubleNumber = 3.545555555;
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.DOWN);
double myDoubleNumberTruncated = Double.parseDouble(df.format(myDoubleNumber));
System.out.println(myDoubleNumberTruncated);

그러면 3.54가 출력됩니다.

Decimal Format ("#")##") - 여기에서는 소수점 뒤에 해시 기호(##)를 2개 입력합니다.따라서 소수점 이하 2자리까지 숫자가 잘립니다.

이것은 플러스 값과 마이너스 값 모두에 적용됩니다.

는 마니의 버전을 약간 수정했다.

private static BigDecimal truncateDecimal(final double x, final int numberofDecimals) {
    return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_DOWN);
}

public static void main(String[] args) {
    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(3.545555555, 2));

    System.out.println(truncateDecimal(9.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.0, 2));
    System.out.println(truncateDecimal(-3.545555555, 2));

}

출력:

0.00
9.62
9.62
9.62
9.62
9.99
9.00
3.54
-9.62
-9.62
-9.62
-9.62
-9.99
-9.00
-3.54

이 방법은 효과가 있었습니다.

double input = 104.8695412  //For example

long roundedInt = Math.round(input * 100);
double result = (double) roundedInt/100;

//result == 104.87

저는 개인적으로 이 버전이 마음에 들어요. 왜냐하면 이 버전은 String(또는 유사한)으로 변환한 후 포맷하는 것이 아니라 실제로 숫자로 반올림을 하기 때문입니다.

언급URL : https://stackoverflow.com/questions/7747469/how-can-i-truncate-a-double-to-only-two-decimal-places-in-java

반응형