Come visualizzare correttamente un prezzo fino a due decimali (centesimi) inclusi gli zeri finali in Java?

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

Domanda

C'è una buona domanda sull'arrotondamento dei decimali in Java Qui.Ma mi chiedevo come posso includere gli zeri finali per visualizzare i prezzi nel mio programma come:$ 1,50, $ 1,00

La soluzione semplice di

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

funziona bene, ma omette lo zero finale se si trova all'ultima cifra decimale.Il problema si presenta nel mio programma anche se utilizzo solo espressioni come questa:

double price = 1.50;

Quando eseguo calcoli con prezzi diversi (aggiungere, moltiplicare, ecc.) il risultato viene visualizzato principalmente in questo modo:

$2.5000000000000003

Quindi, l'utilizzo di String.format funziona bene per questo scopo, ma tronca l'esempio precedente

$2.5

Esiste un modo corretto per mostrare lo zero finale alla seconda cifra decimale?Oppure entrambi gli zeri se l'output di un calcolo dovrebbe essere

$2.00
È stato utile?

Soluzione

mi consiglia di fare questo:

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

Questo ha il pregio di essere specifica locale pure. Questo lavoro, per esempio, se siete nella zona euro al posto degli Stati Uniti.

Altri suggerimenti

Mentre altre risposte sono perfettamente valide (specialmente quella di Duffymo), hai un problema molto più grande della formattazione del display.In realtà stai utilizzando un total sbagliato digitare un importo in denaro che è a discreto valore.Invece di a double, dovresti davvero prendere in considerazione l'utilizzo di a java.lang.BigDecimal.

(MODIFICARE:...o una classe Money ben implementata come ha sottolineato duffymo in un commento, ad esempio le classi di JScience monetario modulo o quello più recente Joda-Money - che deve ancora essere rilasciata come versione ufficiale.)

Probabilmente può essere fatto con String.Format (...), ma si potrebbe usare DecimalFormat :

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

Hai provato:

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

che farà il trucco.

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;
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top