2013-06-25 3 views
5

stavo lavorando su un compito in cui mi ha colpito la gestione di uno scenario negativo di seguito indicateCome formattare una doppia con quantità variabile di cifre decimali

Se il valore è inferiore a 1 allora voglio formattare (aggiungi) 4 punti decimali ad esso.

Per esempio se il valore è 0,4567 poi ho bisogno di 0,4567

Oppure se il valore è maggiore di 1 formato con solo 2 cifre.

Ad esempio se il valore è 444,9 poi ho bisogno 444,90

Tutto quanto sopra menzionato funziona bene, ma colpito in questa sotto condizione

cioè se il valore è inferiore a 1 e termina come zeri (0.1000, 0.6000), non ha senso per stampare 0.2000, quindi in questo caso voglio l'uscita di essere solo come 0.20

Questo è il mio programma qui di seguito

package com; 
import java.text.DecimalFormat; 
public class Test { 
    public static void main(String args[]) { 
     try { 
      String result = ""; 
      Test test = new Test(); 
      double value = 444.9; 
      if (value < 1) { 
       result = test.numberFormat(value, 4); 
      } else { 
       result = test.numberFormat(value, 2); 
      } 
      System.out.println(result); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    public String numberFormat(double d, int decimals) { 
     if (2 == decimals) 
      return new DecimalFormat("#,###,###,##0.00").format(d); 
     else if (0 == decimals) 
      return new DecimalFormat("#,###,###,##0").format(d); 
     else if (3 == decimals) 
      return new DecimalFormat("#,###,###,##0.000").format(d); 
     else if (4 == decimals) 
      return new DecimalFormat("#,###,###,##0.0000").format(d); 
     return String.valueOf(d); 
    } 

} 
+0

Una condizione basata su x < 1 || x > = 1, quindi se è <1 e termina con "00" tagliato fuori? –

risposta

6

uso # se si vuole ignorare 0 in 3 ° e 4 ° decimali luoghi

new DecimalFormat("#,###,###,##0.00##").format(d) 
+1

se funziona, questa risposta è decisamente migliore della mia :) – Dariusz

+0

@ Dariusz- Dovrebbe funzionare. Provalo. – chetan

+0

@chetan davvero un'ottima risposta, grazie mille. – Pawan

0

Basta fare una stringa con quattro cifre e controllare per gli zeri finali. Se ci sono due zeri o meno, rimuoverli. Altrimenti, lascialo com'è.

result = test.numberFormat(value, 4); 
if (result.endsWith("00")) { 
    result=result.substring(0, result.length()-2); 
} else if (result.endsWith("0")) { 
    result=result.substring(0, result.length()-1); 
} 

Potrebbe non essere ottimale, ma è di facile lettura e manutenzione.

+0

@chetan, sembra un bug se il valore è 0,0007 (termina con 3 zeri e un numero) – Pawan