stripTrailingZeros() funktioniert, aber es gibt wissenschaftliche Notationen in Situationen wie
new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
In diesem Fall kehrt es zurück 6E+2. Ich brauche dies in einem benutzerdefinierten Konverter in JSF, wo es für Endbenutzer hässlich sein könnte. Also, was ist der richtige Weg, dies zu tun?
BigDecimal d = new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
System.out.println(d.toPlainString()); // Printed 600 for me
Ich bin (noch) nicht in JSF, aber der Konverter könnte so aussehen:
@FacesConverter("bigDecimalPlainDisplay")
public class BigDecimalDisplayConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
throw new BigDecimal(value);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
BigDecimal bd = (BigDecimal)value;
return bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString();
}
}
val = new BigDecimal("0.0000").stripTrailingZeros();
System.out.println(val + ": plain=" + val.toPlainString());
val = new BigDecimal("40.0000").stripTrailingZeros();
System.out.println(val + ": plain=" + val.toPlainString());
val = new BigDecimal("40.50000").stripTrailingZeros();
System.out.println(val + ": plain=" + val.toPlainString());
Das 0.0000 Das Problem in Java 7 wird in Java 8 wie folgt behoben Java-Fix.
Das hat bei mir funktioniert. Die 0,0000-Beträge sind immer noch seltsam, aber es bereinigt den Rest der möglichen Werte davon, dass ~dp-Werte von 0 dahinterstehen, wenn die angeforderte Genauigkeit geringer als verfügbar ist.
– Glenn.nz
25. Juni 2014 um 2:27 Uhr
Nicht das, was ich gefunden habe … Ihr erstes Beispiel zum Entfernen von Nullen aus “0.0000” ergibt “0” sowohl mit “toString()” als auch mit “toPlainString()”. Machen wir etwas anders? ideone.com/fjS4qE
– Nateowami
19. September 2015 um 13:27 Uhr
Java 8 behebt einen Fehler, daher ist das erste Beispiel „0“ (das Verhalten von Java 7 ist „0.0000“).
– Rauben
27. April 2016 um 15:16 Uhr
Wenn Sie dies an Ihrem BigDecimal-Objekt tun und es nicht mit einem Formatierer in einen String konvertieren möchten, können Sie dies in Java 8 mit 2 Schritten tun:
stripTrailingZeros()
if scale < 0 setScale to 0 if not like esponential/scientific notation
Sie können dieses Snippet ausprobieren, um das Verhalten besser zu verstehen
BigDecimal value = new BigDecimal("15.3456").setScale(2, BigDecimal.ROUND_HALF_UP));
String valueString = new DecimalFormat("#.##").format(value);
System.out.println(valueString); //15.35
Bitte versuchen Sie es selbst.
11865500cookie-checkEntfernen von nachgestellten Nullen aus BigDecimal in Javayes