Ich muss ein Float auf "n" Dezimalstellen formatieren.
habe versucht, BigDecimal, aber der Rückgabewert ist nicht korrekt ...
public static float Redondear(float pNumero, int pCantidadDecimales) {
// the function is call with the values Redondear(625.3f, 2)
BigDecimal value = new BigDecimal(pNumero);
value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
return value.floatValue(); // but here the values is 625.3
}
Ich muss einen Gleitkommawert mit der von mir angegebenen Anzahl von Dezimalstellen zurückgeben.
Ich brauche Float
keine WertrückgabeDouble
.
String.format(java.util.Locale.US,"%.2f", floatValue);
Schauen Sie sich DecimalFormat an . Sie können es leicht verwenden, um eine Zahl zu nehmen und ihr eine festgelegte Anzahl von Dezimalstellen zu geben.
Bearbeiten : Beispiel
quelle
DecimalFormat
Konstruktors abgeraten wird. Eine korrekte Verwendung von finden Sie in meiner AntwortNumberFormat
.Versuchen Sie dies, das hat mir sehr geholfen
Ergebnis ist roundfinalPrice -> 5652.26
quelle
Von der Verwendung eines
DecimalFormat
Konstruktors wird abgeraten. Das Javadoc für diese Klasse lautet:https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
Was Sie also tun müssen, ist (zum Beispiel):
quelle
Hier ist ein kurzes Beispiel mit der
DecimalFormat
von Nick erwähnten Klasse.Die Ausgabe der print-Anweisung ist 12.35. Beachten Sie, dass es für Sie rundet.
quelle
DecimalFormat
Konstruktors abgeraten wird. Eine korrekte Verwendung von finden Sie in meiner AntwortNumberFormat
.Ein bisschen überrascht, dass niemand auf den direkten Weg hingewiesen hat, was einfach genug ist.
Ich bin mir ziemlich sicher, dass dies keine halbrunde Rundung macht.
Für das, was es wert ist, wird eine halbgleichmäßige Rundung jedes Mal chaotisch und unvorhersehbar sein, wenn Sie binärbasierte Gleitkommawerte mit Basis-10-Arithmetik mischen. Ich bin mir ziemlich sicher, dass das nicht geht. Das Grundproblem besteht darin, dass ein Wert wie 1.105 nicht genau im Gleitkomma dargestellt werden kann. Der Gleitkommawert wird ungefähr 1.105000000000001 oder 1.104999999999999 sein. Jeder Versuch, eine halbgleichmäßige Rundung durchzuführen, führt also zu Repräsentationscodierungsfehlern.
IEEE-Gleitkommaimplementierungen führen eine Halbrundung durch, jedoch eine binäre Halbrundung und keine dezimale Halbrundung. Also bist du wahrscheinlich in Ordnung
quelle
pow
eine zu teure Operation zum Runden ist?quelle
Dies ist eine viel weniger professionelle und viel teurere Methode, die jedoch für Anfänger verständlicher und hilfreicher sein sollte.
quelle
Ich denke was du willst ist
und verwenden Sie den Rückgabewert zur Anzeige.
wird immer 625.3 zurückgeben, da es hauptsächlich zur Berechnung von etwas verwendet wird.
quelle
Ich suchte nach einer Antwort auf diese Frage und entwickelte später eine Methode! :) Eine faire Warnung, es rundet den Wert ab.
quelle