Zum Beispiel habe ich die Variable 3.545555555, die ich auf nur 3.54 kürzen möchte.
Zum Beispiel habe ich die Variable 3.545555555, die ich auf nur 3.54 kürzen möchte.
Antworten:
Wenn Sie dies zu Anzeigezwecken 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;
floor
Abschneiden funktioniert nur bei positiven Werten.
RoundingMode.DOWN
wie RoudingMode.FLOOR
immer mit Runden in Richtung negativer Unendlichkeit.
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);
Überprüfen Sie verfügbar RoundingMode
und DecimalFormat
.
DOWN
dies tatsächlich den Effekt einer Kürzung sowohl für positive als auch für negative Zahlen hat. Wie in der Beispieltabelle im Dokument zu sehen .
Bit Old Forum, Keine der obigen Antworten hat sowohl für positive als auch für negative Werte funktioniert (ich meine für die Berechnung und nur zum Abschneiden ohne Rundung). Vom Link Runden einer Zahl auf n Dezimalstellen im Java- Link
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 bei mir 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
Hinweis zunächst , dass eine double
eine Binärbruch ist und nicht wirklich haben Dezimalstellen.
Wenn Sie Dezimalstellen benötigen, verwenden Sie a BigDecimal
, das eine setScale()
Methode zum Abschneiden enthält, oder verwenden Sie DecimalFormat
, um a zu erhalten String
.
Wenn Sie aus irgendeinem Grund keine verwenden möchten, BigDecimal
können Sie Ihre double
in eine int
umwandeln, um sie abzuschneiden.
Wenn Sie auf den Ort der Einen kürzen möchten :
int
Zum zehnten Platz:
int
double
Hundreths Platz
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 decimalPlaces
wäre die Anzahl der Stellen VERGANGEN, an die Sie gehen möchten, also würde 1 auf die Zehntelstelle , 2 auf die Hundertstel usw. runden (0 Runden auf die Einerstelle und eine negative auf die Zehnerstelle , etc.)
unroundedNumber
groß genug sind. Es mag für das Beispiel in der Frage funktionieren, aber eine allgemeine Lösung sollte für jedes funktionieren double
.
Wenn Sie als Zeichenfolge formatieren und wieder in Double konvertieren, erhalten Sie das gewünschte Ergebnis.
Der doppelte Wert ist nicht rund (), Boden () oder Decke ().
Eine schnelle Lösung 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 newValue für die Berechnung verwenden.
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
Hier ist die Methode, die ich benutze:
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 durchgeführt werden:
a=Math.floor(a*100) / 100;
Vielleicht folgendes:
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
Eine schnelle Überprüfung ist die Verwendung der Math.floor-Methode. Ich habe eine Methode erstellt, um ein Double auf zwei oder weniger Dezimalstellen zu überprüfen:
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;
}
Ich habe eine leicht modifizierte Version von Mani .
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));
}
Ausgabe:
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
Das hat bei mir funktioniert:
double input = 104.8695412 //For example
long roundedInt = Math.round(input * 100);
double result = (double) roundedInt/100;
//result == 104.87
Ich persönlich mag diese Version, weil sie die Rundung tatsächlich numerisch durchführt, anstatt sie in einen String (oder einen ähnlichen) zu konvertieren und dann zu formatieren.
//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 mag etwas umständlich sein, aber ich denke, es kann dein Problem lösen :)