2013-01-10 11 views
6

Sto provando i metodi e la funzionalità della classe NumberFormat e ho raggiunto uno strano risultato. I compilare ed eseguire il seguente programma:NumberFormat setMaximumFractionDigits method

public static void main(String[] args) { 

Locale loc = Locale.US; 
    NumberFormat nf = NumberFormat.getInstance(loc); 
    System.out.println("Max: "+nf.getMaximumFractionDigits()); 
    System.out.println("Min: "+nf.getMinimumFractionDigits()); 
    try { 
     Number d = nf.parse("4527.9997539"); 
     System.out.println(d); 
     // nf.setMaximumFractionDigits(4); 
     System.out.println(nf.format(4527.999753)); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

L'output è:

Max: 3 
Min: 0 
4527.9997539 
4,528 

Ciò significa che esso non tiene conto di eventuali cifre frazione. Se io commento dalla riga:

nf.setMaximumFractionDigits(4); 

l'output è:

Max: 3 
Min: 0 
4527.9997539 
4,527.9998 

In altre parole, funziona bene. Cosa sta realmente accadendo con il metodo setMaximumFractionDigits() e non porta il numero che contiene 3 cifre di frazione nel primo caso?

+0

Si intende l'impostazione manuale delle cifre decimali di un numero? –

risposta

11

Ho trovato la risposta alla fine. Il metodo setMaximumFractionDigits() ha un effetto solo sul metodo format(). Non ha nulla a che fare con parse(). Nel mio frammento di codice utilizzo il metodo format() dopo aver impostato manualmente il numero di cifre della frazione su 4, di conseguenza influisce sul risultato.

1

Il numero creato dalla stringa analizzata ha più cifre frazionarie. Ma quando si tenta di eseguire l'output utilizza il formato MaximumFractionDigits per creare String da qualsiasi numero.

+0

Non riesco ancora a capire la causa del problema. Anche io imposto il manuale delle cifre massime (tramite il metodo setMaximumFractionDigits) su 3, restituisce un numero senza parti di frazione. Penso che avrebbe dovuto produrre una frazione di 3 cifre. – arjacsoh

2

Se si desidera impostare manualmente il numero di cifre decimali utilizzare una delle seguenti opzioni:

In primo luogo:

//sets 'd' to 3 decimal places & then assigns it to 'formattedNum' 
    String formattedNum = String.format("%.3f", d); //variable 'd' taken from your code above 

O

//declares an object of 'DecimalFormat' 
    DecimalFormat aDF = new DecimalFormat("#.000"); 

    //formats value stored in 'd' to three decimal places 
    String fomrattedNumber = aDF.format(d); 

A mio parere il secondo tute opzione meglio per il tuo caso.