round long java double int rounding

long - Redondeando un doble para convertirlo en int(java)



long to int java (8)

En este momento estoy intentando esto:

int a = round(n);

donde n es un double pero no funciona. ¿Qué estoy haciendo mal?


¿Cuál es el tipo de devolución del método round() en el fragmento?

Si este es el método Math.round() , devuelve un Long cuando el parámetro de entrada es Double.

Por lo tanto, tendrá que emitir el valor de retorno:

int a = (int) Math.round(doubleVar);


La documentación de Math.round dice:

Devuelve el resultado de redondear el argumento a un entero . El resultado es equivalente a (int) Math.floor(f+0.5) .

No es necesario convertir a int . Tal vez fue cambiado desde el pasado.


La función Math.round está sobrecargada Cuando recibe un valor flotante, le dará un int. Por ejemplo, esto funcionaría.

int a=Math.round(1.7f);

Cuando recibe un valor doble, le dará un largo, por lo tanto, tiene que encasillarlo en int.

int a=(int)Math.round(1.7);

Esto se hace para evitar la pérdida de precisión. Su valor doble es de 64 bits, pero luego su variable int solo puede almacenar 32 bits, por lo que solo la convierte en larga, que es de 64 bits, pero puede encasillarla en 32 bits como se explicó anteriormente.


Realmente necesita publicar un ejemplo más completo, para que podamos ver lo que está tratando de hacer. De lo que has publicado, esto es lo que puedo ver. Primero, no hay un método round() incorporado. Debes llamar a Math.round(n) o importar Math.round y luego llamarlo como lo hiciste.


Redondeando el doble al entero "más cercano" como este:

1.4 -> 1

1.6 -> 2

-2.1 -> -2

-1.3 -> -1

-1.5 -> -2

private int round(double d){ double dAbs = Math.abs(d); int i = (int) dAbs; double result = dAbs - (double) i; if(result<0.5){ return d<0 ? -i : i; }else{ return d<0 ? -(i+1) : i+1; } }

Puede cambiar la condición (resultado <0.5) como prefiera.


Si no te gusta Math.round () también puedes usar este enfoque simple:

int a = (int) (doubleVar + 0.5);


import java.math.*; public class TestRound11 { public static void main(String args[]){ double d = 3.1537; BigDecimal bd = new BigDecimal(d); bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP); // output is 3.15 System.out.println(d + " : " + round(d, 2)); // output is 3.154 System.out.println(d + " : " + round(d, 3)); } public static double round(double d, int decimalPlace){ // see the Javadoc about why we use a String in the constructor // http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double) BigDecimal bd = new BigDecimal(Double.toString(d)); bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP); return bd.doubleValue(); } }


public static int round(double d) { if (d > 0) { return (int) (d + 0.5); } else { return (int) (d - 0.5); } }