redondea hasta 2 decimales en java?

He leído muchas preguntas sobre stackflow, pero ninguna parece funcionar para mí. Estoy usando math.round() para redondear. este es el código:

 class round{ public static void main(String args[]){ double a = 123.13698; double roundOff = Math.round(a*100)/100; System.out.println(roundOff); } } 

el resultado que obtengo es: 123 pero quiero que sea 123.14 . He leído que agregar *100/100 ayudará, pero como puede ver, no logré que funcione.

es absolutamente esencial que tanto la entrada como la salida sean dobles.

Sería de gran ayuda si cambia la línea 4 del código anterior y lo publica.

Bueno, este funciona …

 double roundOff = Math.round(a * 100.0) / 100.0; 

La salida es

 123.14 

O como dijo @Rufein

  double roundOff = (double) Math.round(a * 100) / 100; 

esto lo hará por ti también.

  double d = 2.34568; DecimalFormat f = new DecimalFormat("##.00"); System.out.println(f.format(d)); 
 String roundOffTo2DecPlaces(float val) { return String.format("%.2f", val); } 
 BigDecimal a = new BigDecimal("123.13698"); BigDecimal roundOff = a.setScale(2, BigDecimal.ROUND_HALF_EVEN); System.out.println(roundOff); 

Regrese a su código y reemplace 100 por 100.00 y avíseme si funciona. Sin embargo, si quieres ser formal, prueba esto:

 import java.text.DecimalFormat; DecimalFormat df=new DecimalFormat("0.00"); String formate = df.format(value); double finalValue = (Double)df.parse(formate) ; 

Sé que esta es una pregunta de hace 2 años, pero como cada cuerpo enfrenta un problema para redondear los valores en algún punto del tiempo. Me gustaría compartir una forma diferente que nos puede dar valores redondeados a cualquier escala usando la clase BigDecimal. Aquí tenemos puede evitar pasos adicionales que se requieren para obtener el valor final si usamos DecimalFormat("0.00") o usando Math.round(a * 100) / 100 .

 import java.math.BigDecimal; public class RoundingNumbers { public static void main(String args[]){ double number = 123.13698; int decimalsToConsider = 2; BigDecimal bigDecimal = new BigDecimal(number); BigDecimal roundedWithScale = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("Rounded value with setting scale = "+roundedWithScale); bigDecimal = new BigDecimal(number); BigDecimal roundedValueWithDivideLogic = bigDecimal.divide(BigDecimal.ONE,decimalsToConsider,BigDecimal.ROUND_HALF_UP); System.out.println("Rounded value with Dividing by one = "+roundedValueWithDivideLogic); } } 

Este progtwig nos daría debajo de salida

 Rounded value with setting scale = 123.14 Rounded value with Dividing by one = 123.14 
 double roundOff = Math.round(a*100)/100; 

debiera ser

 double roundOff = Math.round(a*100)/100D; 

Agregar ‘D’ a 100 lo hace doble literal, por lo tanto el resultado producido tendrá precisión

Tratar :

 class round{ public static void main(String args[]){ double a = 123.13698; double roundOff = Math.round(a*100)/100; String.format("%.3f", roundOff); //%.3f defines decimal precision you want System.out.println(roundOff); }} 

Esta es una larga pero una solución de prueba completa, nunca falla

Simplemente pase su número a esta función como un doble, lo devolverá redondeando el valor decimal hasta el valor más cercano de 5;

si 4.25, salida 4.25

si 4.20, Salida 4.20

si 4.24, Salida 4.20

si 4.26, Salida 4.30

si quieres redondear hasta 2 decimales, usa

 DecimalFormat df = new DecimalFormat("#.##"); roundToMultipleOfFive(Double.valueOf(df.format(number))); 

si hasta 3 lugares, nuevo DecimalFormat (“#. ###”)

si hasta n lugares, nuevo DecimalFormat (“#. nTimes # “)

  public double roundToMultipleOfFive(double x) { x=input.nextDouble(); String str=String.valueOf(x); int pos=0; for(int i=0;i 

parece que te golpea la aritmética de enteros: en algunos idiomas (int) / (int) siempre se evaluará como aritmética de enteros. para forzar la aritmética de punto flotante, asegúrese de que al menos uno de los operandos sea no entero:

 double roundOff = Math.round(a*100)/100.f; 

Acabo de modificar tu código. Funciona bien en mi sistema. A ver si esto ayuda

 class round{ public static void main(String args[]){ double a = 123.13698; double roundOff = Math.round(a*100)/100.00; System.out.println(roundOff); } } 
 public static float roundFloat(float in) { return ((int)((in*100f)+0.5f))/100f; } 

Debería estar bien para la mayoría de los casos. Todavía puede cambiar los tipos si quiere cumplir con los dobles por ejemplo.