Wie man richtig einen Preis angezeigt wird bis zu zwei Dezimalstellen (Cent) mit nachfolgenden Nullen in Java?

StackOverflow https://stackoverflow.com/questions/1734282

Frage

Es ist eine gute Frage auf Dezimalzahlen in Java hier . Aber ich frage mich, wie kann ich die hinteren Nullen zu Anzeige der Preise in meinem Programm enthalten wie: $ 1.50, $ 1.00

Die einfache Lösung

String.format("%.2g%n", 0.912385);

funktioniert gut, läßt aber die Hinter Null, wenn es in der letzten Dezimalstelle. Das Problem kommt in mein Programm auf, obwohl ich Ausdrücke nur wie folgt verwenden:

double price = 1.50;

Wenn ich Berechnungen mit unterschiedlichen Preisen (Add, multiplizieren usw.) das Ergebnis in erster Linie wie folgt angezeigt:

$2.5000000000000003

Also, mit der String.format funktioniert gut für diesen Zweck, aber es kürzt das obige Beispiel zu

$2.5

Gibt es eine richtige Art und Weise die hintere Null bei der zweiten Nachkommastelle zu zeigen? Oder beide Nullen, wenn die Ausgabe einer Berechnung sollte

$2.00
War es hilfreich?

Lösung

Ich würde empfehlen, dass Sie dies tun:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));

Dies hat den Grund wäre länderspezifische als auch. Dies funktioniert, zum Beispiel, wenn Sie in der Euro-Zone statt dem US sind.

Andere Tipps

Während andere Antworten vollkommen gültig sind (vor allem duffymo ist ein), Sie haben ein viel größeres Problem als die Anzeige der Formatierung. Sie verwenden tatsächlich eine völlig falsch Typ für einen Geldbetrag, der ein diskrete Wert. Statt eines double, sollten Sie wirklich in Betracht ziehen mit einem java.lang.BigDecimal .

(EDIT: ... oder ein gut umgesetzt Geld Klasse als duffymo in einem Kommentar darauf hingewiesen, zum Beispiel Klassen von JScience der Geld Modul oder die neuere Joda -Geld -., die noch als offizielle Version veröffentlicht werden muss)

Es kann wahrscheinlich mit String.format (...) getan werden, aber man konnte a href verwenden <= "http://java.sun.com/j2se/1.5.0/docs/api/java/text /DecimalFormat.html“rel = "noreferrer"> DecimalFormat :

double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50

Haben Sie versucht:

String s = String.format("$%.2f", 2.50);

Das wird den Trick tun.

public static String getFormattedData(String actualString) 
    {
        String subString = "0.0";

        if(actualString.contains("."))
        {   
            subString = actualString.substring(actualString.indexOf("."), actualString.trim().length()); 

            if(Double.parseDouble(subString) > 0.0)
                return actualString;
            else
                actualString = actualString.substring(0, actualString.indexOf("."));
        }
        return actualString;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top