2012-06-17 23 views
24

Duplicar posibles:
How to round a number to n decimal places in Javanecesito para redondear un flotador con dos decimales en Java

Estoy teniendo dificultades para redondear un flotador con dos decimales. He intentado algunos métodos que he visto aquí, incluyendo simplemente usar Math.round(), pero no importa lo que haga, sigo obteniendo números inusuales.

Tengo una lista de carrozas que estoy procesando, la primera en la lista se muestra como 1.2975118E7. ¿Cuál es el E7?

Cuando uso Math.round(f) (f es el flotador), obtengo el mismo número exacto.

Sé que estoy haciendo algo mal, simplemente no estoy seguro de qué.

Solo quiero que los números tengan el formato x.xx. El primer número debe ser 1.30, etc.

+2

Quiere redondear la visualización String * de un número de coma flotante. Probablemente no quieras redondear el número en sí mismo.Evite la flotación, y use el doble en su lugar para una mayor precisión, y luego observe uno de los muchos métodos disponibles para obtener una visualización de Cadena decente de un número doble incluyendo String.format (...), NumberFormat o DecimalFormat. –

Respuesta

-3

Intente mirar la clase BigDecimal. Es el ir a clase para la moneda y admite un redondeo preciso.

+1

No entiendo, ¿puedes proporcionar más aclaraciones? – nsfyn55

71

1.2975118E7 es scientific notation.

1.2975118E7 = 1.2975118 * 10^7 = 12975118 

También, Math.round(f) devuelve un entero. No puede usarlo para obtener el formato deseado x.xx.

Puede usar String.format.

String s = String.format("%.2f", 1.2975118); 
// 1.30 
+1

'String.format' puede generar problemas ya que creará números flotantes con puntos o comas de acuerdo con la configuración regional. –

+0

@YoannHercouet, no se puede jugar con las carrozas sin pensar en las configuraciones regionales. Eso no debería ser un problema. ;-) – Alexander

+4

usa esto: String.format (Locale.US, "% .2f", 1.2975118) que es más seguro ... al menos sabes el formato siempre ... –

36

Si usted está buscando un formato de moneda (que no se ha especificado, pero parece que es lo que está buscando) tratar la clase NumberFormat. Es muy simple:

double d = 2.3d; 
NumberFormat formatter = NumberFormat.getCurrencyInstance(); 
String output = formatter.format(d); 

¿Cuál es la salida (según la zona):

$2.30

Además, si no se requiere la moneda (sólo los exactos dos cifras decimales) que puede utilizar esto en vez :

NumberFormat formatter = NumberFormat.getNumberInstance(); 
formatter.setMinimumFractionDigits(2); 
formatter.setMaximumFractionDigits(2); 
String output = formatter.format(d); 

¿Cuál es la salida 2.30

+0

¿Alguien quiere explicar los votos a favor y atras de mi respuesta? ¿Makoto? – kcoppock

+0

No estoy seguro. Le voté a usted y a @Makato porque estos fueron los primeros en abordar el problema real: la representación de cadena formateada de un número de coma flotante. –

+1

@Hovercraft Full Of Eels: Gracias; Elegí a Makato también. Solo puedo adivinar que alguien está enojado porque esto fue marcado como una pregunta duplicada. No hace que las respuestas sean inválidas. Sidenote, es posible que tengas el mejor nombre de usuario que he visto en mi vida. – kcoppock

6

Puede hacer uso de DecimalFormat para darle el estilo que desea.

DecimalFormat df = new DecimalFormat("0.00E0"); 
double number = 1.2975118E7; 
System.out.println(df.format(number)); // prints 1.30E7 

Ya que está en notación científica, no será capaz de obtener el número de cualquier menor de 10 sin perder esa cantidad de órdenes de magnitud de precisión.

+0

Gracias a todos por su ayuda. La notación científica fue lo que me atrapó, pensé que no estaba funcionando porque los números eran los mismos, ¡pero mi número estaba equivocado desde el principio! – lonewookie

+0

puedo devolver el valor flotante de esto: float roundofDecimal (float dd) { \t DecimalFormat df = new DecimalFormat(); \t df.setMaximumFractionDigits (2); \t System.out.println (df.format (dd)); \t \t return df.format (dd); } – CoronaPintu

+1

@PintuCorna: No, no parece que haya ninguna forma de recuperar el flotante de un 'DecimalFormat'. Honestamente, estás perdiendo precisión si pasas de doble a flotante; Además, formatear el número es una formalidad para la persona que lee los datos: si desea el número de coma flotante sin procesar, simplemente devuelva * ese *! – Makoto

Cuestiones relacionadas