Prüfen von Komma stelle beim Taschenrechner

Fiedelbambu

Mitglied
Moin,


vielleicht hat ja jemand Interesse mir zu Helfen.

Ich möchte eine Anweisung schreiben zur Prüfung ob meine Berechnung mit oder ohne Komma dargestellt wird.
Wie man auf dem Bild sieht ist das Ergebnis 522,0 . Ich möchte eine If Anweisung schreiben die dann Prüft
ob nach dem Komma eine Zahl steht oder nicht. Leider kenne ich die Anweisung dazu nicht. Vielleicht mag ja mir einer sagen wie ich das Schreibe.

bild.png
 
Java:
    public static BigDecimal getBigDecimalDe(String preis) throws ParseException {
        NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
        Number number = nf.parse(preis);
        return new BigDecimal(number.doubleValue());
    }

also du brauchst wenn du nicht mit strings rum wurschteln willst irgendwas mit zahlen format, und komma zahlen
das sind so die sachen wonach du suchen kannst
 
Java:
    public static BigDecimal getBigDecimalDe(String preis) throws ParseException {
        NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
        Number number = nf.parse(preis);
        return new BigDecimal(number.doubleValue());
    }

also du brauchst wenn du nicht mit strings rum wurschteln willst irgendwas mit zahlen format, und komma zahlen
das sind so die sachen wonach du suchen kannst


Danke das doch ein Anfang wonach ich suchen kann
 
Java:
    public static BigDecimal getBigDecimalDe(String preis) throws ParseException {
        NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
        Number number = nf.parse(preis);
        return new BigDecimal(number.doubleValue());
    }

also du brauchst wenn du nicht mit strings rum wurschteln willst irgendwas mit zahlen format, und komma zahlen
das sind so die sachen wonach du suchen kannst
Das Beispiel hat 2 Probleme.
1. Die Zahl aus dem Beispiel ist nicht für Locale.GERMAN geeignet, da sie einen Punkt als Trenner verwendet. Diee Kombination führt zu falschen Ergebnissen.
2. "BigDecimal(double)" sollte nicht verwendet werden

Aufgrund der Ungenauigkeit von Fließkommazahlen ist es unwahrscheinlich, dass man den Wert erhält, den man vom BigDecimal(double)-Konstruktor erwartet.

Aus den JavaDocs:
Die Ergebnisse dieses Konstruktors können etwas unvorhersehbar sein. Man könnte annehmen, dass das Schreiben von new BigDecimal(0.1) in Java einen BigDecimal erzeugt, der genau gleich 0.1 ist (ein unskalierter Wert von 1, mit einer Skalierung von 1), aber er ist tatsächlich gleich 0.1000000000000000055511151231257827021181583404541015625. Der Grund dafür ist, dass 0,1 nicht exakt als Double (oder überhaupt als binärer Bruch einer endlichen Länge) dargestellt werden kann. Daher ist der Wert, der an den Konstruktor übergeben wird, nicht genau gleich 0,1, auch wenn es so aussieht.

Stattdessen sollten Sie BigDecimal.valueOf verwenden, das unter der Haube eine Zeichenkette verwendet, um Fließkomma-Rundungsfehler zu vermeiden, oder den Konstruktor, der ein String-Argument akzeptiert.
 
Ich schlage vor JFormattedTextField zu verwenden und nicht zu versuchen die berechneten Werte zu ändern:
Java:
public class Main {

    public static void main(final String args[]) throws ParseException {
        final JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        final Container content = f.getContentPane();
        content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));

        final JFormattedTextField ftf1 = new JFormattedTextField(new DecimalFormat("#.0"));
        ftf1.setValue(522.0);
        content.add(ftf1);

        final JFormattedTextField ftf2 = new JFormattedTextField(
                new DecimalFormat("#.#", DecimalFormatSymbols.getInstance(Locale.GERMANY)));
        ftf2.setValue(522.0);
        content.add(ftf2);
        f.setSize(300, 100);
        f.setVisible(true);
    }

}
 
Ich danke euch für die ganzen Antworten. Werde die Anregungen durch arbeiten und mich wieder melden und schreiben was davon für mich gefunzt hat
 

Zurück
Oben