Hoe kan ik een double afkappen tot slechts twee decimalen in Java?

Ik heb bijvoorbeeld de variabele 3.545555555, die ik zou willen afkappen tot slechts 3,54.


Antwoord 1, autoriteit 100%

Als je dat voor weergavedoeleinden wilt, gebruik dan java.text.DecimalFormat:

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

Als je het nodig hebt voor berekeningen, gebruik dan java.lang.Math:

Math.floor(value * 100) / 100;

Antwoord 2, autoriteit 29%

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

Controleer beschikbare RoundingModeen DecimalFormat.


Antwoord 3, autoriteit 16%

Beetje oud forum, geen van de bovenstaande antwoorden werkte voor zowel positieve als negatieve waarden (ik bedoel voor de berekening en gewoon om af te kappen zonder afronding).
Van de Hoe een getal op n decimaal af te ronden plaatsen in Javalink

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);
    }
}

Deze methode werkte prima voor mij.

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));

Resultaten:

0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00

4, Autoriteit 6%

Noteer eerst dat een doubleeen binaire fractie is en niet echt heeft decimale plaatsen.

Als u decimale plaatsen nodig hebt, gebruikt u een BigDecimal, met een setScale()-methode voor Truncation of Gebruik DecimalFormatom een String.


Antwoord 5, autoriteit 4%

Formatteren als een string en terug converteren naar double zal je denk ik het gewenste resultaat geven.

De dubbele waarde is niet round(), floor() of ceil().

Een snelle oplossing hiervoor kan zijn:

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

U kunt de sValue gebruiken voor weergavedoeleinden of de newValue voor berekening.


Antwoord 6, autoriteit 3%

U kunt het NumberFormat Class-object gebruiken om de taak uit te voeren.

// 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

Antwoord 7, autoriteit 3%

3.545555555 om 3,54 te krijgen.
Probeer hiervoor het volgende:

   DecimalFormat df = new DecimalFormat("#.##");
    df.setRoundingMode(RoundingMode.FLOOR);
    double result = new Double(df.format(3.545555555);

Dit geeft = 3,54!


Antwoord 8, autoriteit 2%

Misschien Math.floor(value * 100) / 100? Pas op dat waarden zoals 3.54mogelijk niet exact worden weergegeven met een double.


Antwoord 9

Dit is de methode die ik gebruik:

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

Dit kan ook worden gedaan:

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

Antwoord 10

Misschien het volgende:

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

Antwoord 11

Een snelle controle is om de methode Math.floor te gebruiken. Ik heb een methode gemaakt om een dubbel te controleren voor twee of minder decimalen hieronder:

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;
}

Antwoord 12

     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);

Antwoord 13

Ik heb een licht aangepaste versie van Mani‘s.

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));
}

Uitvoer:

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

Antwoord 14

Dit werkte voor mij:

double input = 104.8695412  //For example
long roundedInt = Math.round(input * 100);
double result = (double) roundedInt/100;
//result == 104.87

Persoonlijk vind ik deze versie leuk omdat het de afronding numeriek uitvoert, in plaats van het te converteren naar een string (of iets dergelijks) en het vervolgens op te maken.

Other episodes