2011-01-19 16 views
12

tengo una variable de tipo double, tengo que imprimir en hasta 3 decimales de precisión, pero no debería tener ningún ceros a la derecha ...formato de números de coma flotante

por ejemplo. Necesito

2.5 // not 2.500 
2 // not 2.000 
1.375 // exactly till 3 decimals 
2.12 // not 2.120 

He intentado utilizar DecimalFormatter, lo estoy haciendo mal?

DecimalFormat myFormatter = new DecimalFormat("0.000"); 
myFormatter.setDecimalSeparatorAlwaysShown(false); 

Thanks. :)

Respuesta

21

Prueba el patrón "0.###" en lugar de "0.000":

import java.text.DecimalFormat; 

public class Main { 
    public static void main(String[] args) { 
     DecimalFormat df = new DecimalFormat("0.###"); 
     double[] tests = {2.50, 2.0, 1.3751212, 2.1200}; 
     for(double d : tests) { 
      System.out.println(df.format(d)); 
     } 
    } 
} 

de salida:

2.5 
2 
1.375 
2.12 
+0

@ st0le, cheers! –

4

clase Uso NumberFormat.

Ejemplo:

double d = 2.5; 
    NumberFormat n = NumberFormat.getInstance(); 
    n.setMaximumFractionDigits(3); 
    System.out.println(n.format(d)); 

de salida será 2,5, no 2.500.

6

Su solución es casi correcta, pero debe reemplazar los ceros '0' en el formato de formato decimal por hashes "#".

lo tanto, debe tener este aspecto:

DecimalFormat myFormatter = new DecimalFormat("#.###"); 

Y esa línea no es NECESARIO (como decimalSeparatorAlwaysShown es false por defecto):

myFormatter.setDecimalSeparatorAlwaysShown(false); 

Aquí es breve resumen de javadocs:

Symbol Location Localized? Meaning 
0 Number Yes Digit 
# Number Yes Digit, zero shows as absent 

Y el enlace a javadoc: DecimalFormat

+0

+1 para obtener información adicional. – st0le

+0

Cómo imprimir el número de punto flotante como es 220.90? –

Cuestiones relacionadas