Ich versuche, einige BigDecimal-Werte aus der Zeichenfolge zu lesen. Nehmen wir an, ich habe diesen String: "1,000,000,000.999999999999999" und möchte ein BigDecimal daraus machen. Wie geht das?
Erstens mag ich die Lösungen mit String-Ersetzungen (Ersetzen von Kommas usw.) nicht. Ich denke, es sollte einen ordentlichen Formatierer geben, der diesen Job für mich erledigt.
Ich habe eine DecimalFormatter-Klasse gefunden, die jedoch doppelt funktioniert - große Mengen an Präzision gehen verloren.
Wie kann ich das machen?
java
parsing
bigdecimal
bezmax
quelle
quelle
BigDecimal
.Antworten:
Überprüfen Sie
setParseBigDecimal
in DecimalFormat. Mit diesem Setterparse
wird ein BigDecimal für Sie zurückgegeben.quelle
Vollständiger Code, um zu beweisen, dass nein
NumberFormatException
geworfen wird:Ausgabe
quelle
1000000000.999999999999999
DecimalFormatSymbols.getInstance().getGroupingSeparator()
anstelle eines Kommas verwenden, ohne sich über unterschiedliche Gebietsschemata Gedanken machen zu müssen.Der folgende Beispielcode funktioniert gut (Gebietsschema muss dynamisch abgerufen werden)
quelle
Der Code könnte sauberer sein, aber dies scheint den Trick für verschiedene Gebietsschemas zu tun.
quelle
So würde ich es machen:
Wenn dies im Produktionscode geschehen würde, wäre es natürlich nicht so einfach.
Ich sehe kein Problem darin, einfach die Kommas aus dem String zu entfernen.
quelle
Ich brauchte eine Lösung, um einen String in ein BigDecimal zu konvertieren, ohne das Gebietsschema zu kennen und unabhängig vom Gebietsschema zu sein. Ich konnte keine Standardlösung für dieses Problem finden und habe meine eigene Hilfsmethode geschrieben. Vielleicht hilft es auch anderen:
Update: Warnung! Diese Hilfsmethode funktioniert nur für Dezimalzahlen, also Zahlen, die immer einen Dezimalpunkt haben! Andernfalls könnte die Hilfsmethode für Zahlen zwischen 1000 und 999999 (Plus / Minus) ein falsches Ergebnis liefern. Vielen Dank an bezmax für seinen tollen Input!
Natürlich habe ich die Methode getestet:
quelle
7,333
repräsentiert? Ist es 7333 oder 7 und 1/3 (7,333)? In verschiedenen Gebietsschemas würde diese Nummer unterschiedlich analysiert. Hier ist ein Proof of Concept: ideone.com/Ue9rT8entfernt alle Zeichen außer den Ziffern und dem Punkt aus Ihrer Zeichenfolge.
Um es locale-aware, könnten Sie verwenden möchten
getDecimalSeparator()
ausjava.text.DecimalFormatSymbols
. Ich kenne Java nicht, aber es könnte so aussehen:quelle
Altes Thema, aber vielleicht am einfachsten ist es, Apache Commons NumberUtils zu verwenden, das eine Methode createBigDecimal (String value) hat ....
Ich denke (hoffe), dass es Gebietsschemas berücksichtigt, sonst wäre es eher nutzlos.
quelle
Bitte versuchen Sie dies, es funktioniert für mich
quelle