wake-up-neo.net

Wie kann ich ein Doppel auf nur zwei Dezimalstellen in Java verkürzen?

Ich habe zum Beispiel die Variable 3.545555555, die ich auf 3.54 abschneiden möchte. 

66
Johnny

Wenn Sie dies für Anzeigezwecke wünschen, verwenden Sie Java.text.DecimalFormat :

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

Wenn Sie es für Berechnungen benötigen, verwenden Sie Java.lang.Math :

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

Überprüfen Sie die verfügbaren RoundingMode und DecimalFormat .

39
Cedric Dubourg

Bit Old Forum, Keine der obigen Antworten funktionierte sowohl für positive als auch für negative Werte (ich meine für die Berechnung und einfach, um ohne Abrundung abzuschneiden) .. _. Vom Wie man eine Zahl auf n Dezimalstellen in Java rundet Verknüpfung 

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

Diese Methode hat für mich gut funktioniert.

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

Ergebnisse :

0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
14
Mani

Beachten Sie zunächst, dass eine double ein binärer Bruch ist und nicht wirklich have Dezimalstellen enthält.

Wenn Sie Nachkommastellen benötigen, verwenden Sie eine BigDecimal, die eine setScale()-Methode zum Abschneiden hat, oder verwenden Sie DecimalFormat, um eine String zu erhalten.

7

Wenn Sie aus irgendeinem Grund keine BigDecimal verwenden möchten, können Sie Ihre double in eine int umwandeln, um sie abzuschneiden. 

Wenn Sie auf den Ort Einsen abschneiden möchten:

  • einfach in int umwandeln

Zum Zehntel Ort:

  • multiplizieren Sie mit zehn
  • besetzung in int
  • zurück zu double
  • und durch zehn teilen.

Hundreths Ort

  • multiplizieren und durch 100 teilen etc.

Beispiel:

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

In diesem Beispiel würde decimalPlaces die Anzahl der Orte sein, die PAST derjenige ist, an den Sie gehen möchten, also würde ich zum tenths Platz gehen, 2 zum Hundertstel usw. und so weiter (0 Runden zum one place und negative bis zu Zehnen usw.)

5
Tarvis

Vielleicht Math.floor(value * 100) / 100? Beachten Sie, dass die Werte wie 3.54 möglicherweise nicht exakt mit einer double dargestellt werden.

4
Vlad

Sie können das NumberFormat-Klassenobjekt verwenden, um die Aufgabe auszuführen.

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

Hier ist die Methode, die ich verwende:

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

Dies kann auch gemacht werden:

a=Math.floor(a*100) / 100;
2
Mitchell Hynes

3.545555555, um 3.54 .. zu erhalten, versuchen Sie Folgendes:

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

    df.setRoundingMode(RoundingMode.FLOOR);

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

Das ergibt 3,54!

2
Ankush G

Als String zu formatieren und wieder in Double umzuwandeln, denke ich, wird Ihnen das gewünschte Ergebnis liefern.

Der doppelte Wert ist nicht rund (), Boden () oder Decke ().

Eine schnelle Lösung dafür könnte sein:

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

Sie können den sValue für Anzeigezwecke oder den neuen Wert für die Berechnung verwenden.

2
Jao Assy
//if double_v is 3.545555555
String string_v= String.valueOf(double_v);
int pointer_pos = average.indexOf('.');//we find the position of '.'
string_v.substring(0, pointer_pos+2));// in this way we get the double with only 2 decimal in string form
double_v = Double.valueOf(string_v);//well this is the final result

nun, das ist vielleicht etwas umständlich, aber ich denke, es kann dein Problem lösen :)

0
user5251903

Vielleicht folgendes:

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

Eine schnelle Überprüfung ist die Verwendung der Math.floor-Methode. Ich habe eine Methode erstellt, mit der ein Doppel auf zwei oder weniger Dezimalstellen geprüft werden kann:

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