2011-11-22 12 views
26

Estoy usando java.util.Random para generar un gaussian aleatorio. Necesito convertir este gaussiano en un valor flotante. Sin embargo, gaussiano es un doble, así que necesito una forma de redondear y luego convertirlo en un flotador. Necesito redondear al número entero más cercano, redondeando hacia arriba. Aquí está mi pregunta: ¿Cómo?¿Cómo redondear el doble al número entero más cercano y luego convertirlo en un flotador?

+1

"necesito convertir esta gaussiano a un valor flotante." ... "Necesito redondear al número entero más cercano" ... ¿Quieres un flotador o un número entero? –

+1

¿Desea redondear, o desea redondear al número entero más cercano? –

+1

¿Desea redondear al número entero más cercano o redondear? Esas son declaraciones incompatibles. p.ej. ¿Cómo redondearías 3.4? El número entero más cercano es 3, el redondeo es 4. – user949300

Respuesta

50

float b = (float)Math.ceil(a); o float b = (float)Math.round(a);

Dependiendo de si se quería decir "vuelta al número entero más próximo" (redonda) o "redondear" (ceil).

Tenga cuidado con la pérdida de precisión al convertir un doble en un flotador, pero eso no debería ser un problema aquí.

+0

Gracias por la respuesta, exactamente lo que estaba pidiendo – JAW1025

8

Aquí está un ejemplo rápido:

public class One { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     double a = 4.56777; 
     System.out.println(new Float(Math.round(a))); 

    } 

} 

el resultado y la salida será: 5.0
el flotador límite superior más cercano al valor de partida de double a = 4.56777
en este caso el uso de ronda se recomienda ya que toma valores de double y proporciona valores enteros long

R egards

+0

'(flotante) Math.round (a)' es muchas veces más eficiente en tiempo y espacio. – EJP

+0

De acuerdo. Debe usar 'Float a = new Float (" 3.14 ")' solo cuando necesite acceder a los métodos heredados del objeto de la superclase, como 'clone, toString, equals', etc. 'float a = (float) 3.14;' se comporta muy mal en un enfoque OOP. – VeRo

+0

No sé lo que 'Float a = new Float (" 3.14 ")' tiene que ver con eso. Ni el OP, ni yo, ni usted han dicho nada al respecto, ni tampoco sobre OOP para ese asunto. – EJP

0

Por lo que vale:

el número entero más cercano a cualquier entrada dada, como se muestra en la siguiente tabla se puede calcular utilizando Math.ceil o Math.floor dependiendo de la distancia entre la entrada y el siguiente número entero

+-------+--------+ 
| input | output | 
+-------+--------+ 
|  1 |  0 | 
|  2 |  0 | 
|  3 |  5 | 
|  4 |  5 | 
|  5 |  5 | 
|  6 |  5 | 
|  7 |  5 | 
|  8 |  10 | 
|  9 |  10 | 
+-------+--------+ 

private int roundClosest(final int i, final int k) { 
    int deic = (i % k); 
    if (deic <= (k/2.0)) { 
     return (int) (Math.floor(i/(double) k) * k); 
    } else { 
     return (int) (Math.ceil(i/(double) k) * k); 
    } 
} 
Cuestiones relacionadas