558 votos

Cómo redondear un número con decimales n en Java

Lo que me gustaría es un método para convertir un doble para una cadena que ronda el uso de la mitad de método. Es decir. si el decimal se redondeará a 5, siempre se redondea el número anterior. Este es el método estándar de redondeo de la mayoría de las personas esperan que en la mayoría de las situaciones.

También me gustaría sólo dígitos significativos a mostrarse. Que no debe haber ningún ceros finales.

Yo sé una manera de hacer esto es utilizar el método String.format:

String.format("%.5g%n", 0.912385);

devuelve:

0.91239

que es grande, sin embargo siempre muestra los números con 5 decimales, incluso si no son significativas:

String.format("%.5g%n", 0.912300);

devuelve:

0.91230

Otro método es el uso de la DecimalFormatter:

DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);

devuelve:

0.91238

Sin embargo, como usted puede ver este utiliza la mitad, incluso de redondeo. Que se redondeará a la baja si el dígito anterior es incluso. Lo que me gustaría es este:

0.912385 -> 0.91239
0.912300 -> 0.9123

¿Cuál es la mejor manera de lograr esto en Java?

260voto

asterite Puntos 3218

Suponiendo que value es un double , que puedes hacer:

(double)Math.round(value * 100000) / 100000

Es para una precisión de 5 dígitos. El número de ceros indica el número de decimales.

250voto

curtisk Puntos 8623

Utilice setRoundingMode , ver vinculado Javadoc, definir la RoundingMode explícitamente para manejar el tema con la ronda, incluso medio, entonces use el patrón de formato para tu salida requerida.

107voto

MetroidFan2002 Puntos 11413
new BigDecimal(String.valueOf(double)).setScale(yourScale, BigDecimal.ROUND_HALF_UP);

BigDecimal. BigDecimaltoStringtoPlainString método para Java 5 + para una cadena de formato simple.

70voto

Milhous Puntos 6362

También puede utilizar el

DecimalFormat df = new DecimalFormat("#.00000");
df.format(0.912385);

para asegurarse de que tienes el 0 se arrastra.

54voto

user593581 Puntos 349

Supongamos que usted tiene

double d = 9232.129394d;

puede utilizar BigDecimal

BigDecimal bd = new BigDecimal(d).setScale(2, RoundingMode.HALF_EVEN);
d = bd.doubleValue();

o sin BigDecimal

d = Math.round(d*100)/100.0d;

con ambas soluciones d -> 9232.13

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: