Comment afficher correctement un prix jusqu'à deux décimales (cents), y compris zéros en Java?

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

Question

Il y a une bonne question sur l'arrondi des décimales en Java ici . Mais je me demandais comment puis-je inclure les zéros de suivi à afficher les prix dans mon programme comme: 1,50 $, 1,00 $

La solution simple

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

fonctionne très bien, mais omet le zéro de fuite si elle est à la dernière place décimale. La question est dans mon programme, même si je n'utilise que des expressions comme ceci:

double price = 1.50;

Quand je fais des calculs avec des prix différents (ajouter, multiplier, etc.), le résultat est principalement affiché comme ceci:

$2.5000000000000003

Ainsi, en utilisant l'String.format fonctionne très bien à cette fin, mais il tronque l'exemple ci-dessus

$2.5

Y at-il une bonne façon de montrer le zéro de fuite à la deuxième décimale? Ou les deux zéros si la sortie d'un calcul doit être

$2.00
Était-ce utile?

La solution

Je vous recommande de faire ceci:

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

a la vertu d'être aussi bien des paramètres régionaux. Cela fonctionne, par exemple, si vous êtes dans la zone euro au lieu des États-Unis.

Autres conseils

Alors que les réponses des autres sont parfaitement valables (en particulier duffymo est un), vous avez un problème beaucoup plus grand que le formatage de l'affichage. Vous utilisez en fait un tout à fait mauvais type pour un montant d'argent qui est discret valeur. Au lieu d'un double, vous devriez vraiment envisager d'utiliser un java.lang.BigDecimal .

(EDIT: ... ou une classe d'argent bien mis en œuvre comme duffymo souligné dans un commentaire, pour les classes par exemple à partir de JScience Module monétaire ou plus récente Joda -Money -. qui doit encore être libéré comme une version officielle)

Il peut probablement être fait avec String.format (...), mais vous pouvez utiliser DecimalFormat :

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

Avez-vous essayé:

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

Ce fera l'affaire.

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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top