2011-12-19 15 views
11

Ho bisogno di formattare (e non arrotondato) a double con 2 posizioni decimali.Formattazione di un doppio e non arrotondamento

ho provato con:

String s1 = "10.126"; 
Double f1 = Double.parseDouble(s1); 
DecimalFormat df = new DecimalFormat(".00"); 
System.out.println("f1"+df.format(f1)); 

Risultato:

10.13 

Ma ho bisogno l'uscita di essere 10.12

+0

Questo è stato chiesto la stessa settimana qui https://stackoverflow.com/questions/8486878/how-to-cut-off-decimal-in-java-without-rounding - questo ha molte più opzioni –

risposta

0

Hai provato RoundingMode.FLOOR?

String s1 = "10.126"; 
Double f1 = Double.parseDouble(s1); 
DecimalFormat df = new DecimalFormat(".00"); 
df.setRoundingMode(RoundingMode.FLOOR); 

System.out.println("f1"+df.format(f1)); 
+0

Intendi Math.round (arg0); ?? In realtà ciò lo arrotonderebbe al numero intero più vicino. –

+0

No DecimalFormat's setRoundingMode –

8

È possibile impostare la modalità di arrotondamento del formattatore di GIÙ:

df.setRoundingMode(RoundingMode.DOWN); 
16

chiamata setRoundingMode per impostare il RoundingMode in modo appropriato:

String s1 = "10.126"; 
Double f1 = Double.parseDouble(s1); 
DecimalFormat df = new DecimalFormat(".00"); 
df.setRoundingMode(RoundingMode.DOWN); // Note this extra step 
System.out.println(df.format(f1)); 

uscita

10.12 
+0

Grazie amico ... ma quale versione di java stai usando? –

+0

Grazie per il suggerimento..ma ho bisogno di usare java 1.5 ..i penso che setRoundingMode() sia disponibile in 1.6 –

+0

Vedere la mia risposta usando BigDecimal invece – Brad

0

Se tutto quello che vogliamo fare è troncare una stringa a due cifre decimali, è possibile utilizzare solo le funzioni di stringa come illustrato di seguito:

String s1 = "10.1234"; 
String formatted = s1; 
int numDecimalPlaces = 2; 
int i = s1.indexOf('.'); 
if (i != -1 && s1.length() > i + numDecimalPlaces) { 
    formatted = s1.substring(0, i + numDecimalPlaces + 1); 
} 
System.out.println("f1" + formatted); 

Ciò consente di risparmiare su l'analisi in un letto e poi la formattazione in una stringa.

+0

Grazie amico .... posso usarlo ... ma poi volevo qualcosa di più compatto .. e anche io ho bisogno di fare un paio di calcoli su questi valori, quindi qualsiasi modo ci sarà un po 'di analisi richiesto –

1

Perché non usare BigDecimal

BigDecimal a = new BigDecimal("10.126"); 
BigDecimal floored = a.setScale(2, BigDecimal.ROUND_DOWN); // == 10.12 
Problemi correlati