DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7

internet

Top Contributor
ich versuche gerade eine CSV einzulesen und möchte einen Währungsbetrag bei mir als BigDecimal umwandeln...

Das Problem ist, dass ich einen Wert von 7,99 habe, aber 7 rausbekomme... Ich möchte natürlich ebenfalls 7,99 haben:

Java:
        String paymentAmount = "7,99";
        DecimalFormat df = new DecimalFormat("#0.00");
        DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();

        dfs.setGroupingSeparator(".");
        dfs.setDecimalSeparator(",");
        df.setDecimalFormatSymbols(dfs);
    
        Number n = df.parse(paymentAmount);
        BigDecimal numberPaymentAmount = new BigDecimal(n.toString());

Number n = df.parse(paymentAmount); ist 7

Ich bin mir nicht sicher, ob das Format stimmt: #0.00 ?
Wo liegt der Fehler?

Danke für die Hilfe
 
Aus dem bauch heraus, probier mal:
df.setParseBigDecimal(true) - dann kannst du das Ergebnis von parse auch direkt einem BigDecimal zuweisen.
 
Wie meinst du das genau?
Habe das versucht:

Java:
        df.setParseBigDecimal(true);
        Number n = df.parse(paymentAmount);
        BigDecimal numberPaymentAmount = new BigDecimal(n.toString());

das zB geht nicht:
Java:
BigDecimal n = df.parse(paymentAmount);

auch das nicht:
Java:
BigDecimal n = (BigDecimal) df.parse(paymentAmount);
-> bekomme hier 7 raus


Edit... habe es glaube ich. Habe den Tausendertrenner mit dem Dezimaltrenner vertauscht... . vs ,
 
Java:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.ParseException;

public class TestFormat {

    public static void main(String[] args) throws ParseException {
        String paymentAmount = "7,99";
        DecimalFormat df = new DecimalFormat("#0.00");
        DecimalFormatSymbols dfs = df.getDecimalFormatSymbols();

        dfs.setGroupingSeparator('.');
        dfs.setDecimalSeparator(',');
        df.setDecimalFormatSymbols(dfs);
        df.setParseBigDecimal(true);

        BigDecimal parse = (BigDecimal)df.parse(paymentAmount);
        System.out.println(parse);

    }

}
Ausgabe: 7.99

Dein Code oben kompiliert nicht, die setSeparator Methoden erwarten ein char und keinen String - dementsprechend muss dein echter Code anders aussehen.
 
Das Vorgehen scheint mir reichlich umständlich zu sein. Es geht doch darum Text im deutschen Zahlenformat zu parsen.

Java:
        final var paymentAmount = "7,99";
        final var format = NumberFormat.getInstance(Locale.GERMAN);
        final var parsed = format.parse(paymentAmount);
        final var value = BigDecimal.valueOf(parsed.doubleValue());
        System.out.printf("test result is %b", value.equals(BigDecimal.valueOf(7.99D)));
 

Neue Themen


Zurück
Oben