Título: Random de 0 a 10 con dos decimales Publicado por: Baal_30 en 21 Febrero 2015, 23:52 pm Buenas, pues eso, estoy haciendo un ejercicio y necesito sacar notas del 0 al 10 con dos decimales.
Tengo un par de problemas, el primero que si pongo rnd.nextDouble(10) me salen hasta 9.xx y si pongo rnd.nextDouble(11) me saca hasta 10.xx decimales... No se que tendría que hacer para que me saque sólo del 0 al 10 (ambos inclusive) y con decimales. Y la otra es que me salen demasiados decimales, ¿que manera usais vosotros para redondear a dos solamente? Gracias de antemano. Título: Re: Random de 0 a 10 con dos decimales Publicado por: engel lex en 22 Febrero 2015, 00:09 am y si generas un int entre 0 y 1000 y luego divides entre 100? :P
Título: Re: Random de 0 a 10 con dos decimales Publicado por: 3n31ch en 22 Febrero 2015, 01:51 am Pongo el código de lo que dijo @Engel lex
Código
(según se no existe un rnd.nextDouble(10);). nextDouble genera un numero entre el 0 a 10 con mas de 15 decimales de exactitud. Es por esto que lo que hacemos es multiplicar el resultado de nextDouble por la cantidad de números que queremos, y luego le sumamos el numero menor: Código
Por cierto hace tiempo atrás leí un articulo de que la clase Random no genera números realmente aleatorios. ;) Título: Re: Random de 0 a 10 con dos decimales Publicado por: Baal_30 en 22 Febrero 2015, 18:52 pm ummm que grande, no había pensado en lo de generar un nextInt(1001) y luego entre 100 :o
Nac-ho, el primer código, se podría "simplificar" así : Código
Gracias a los dos ¡! :) Título: Re: Random de 0 a 10 con dos decimales Publicado por: Usuario Invitado en 22 Febrero 2015, 21:42 pm Incluso de puede simplificar aun "más" :xD:
Código Nota el cast que se hace. Cuando se hace una división entre dos números enteros, la división que lleva a cabo el compilador es una división teniendo en cuenta decimales, pero como ambos números son enteros, el compilador entiende que se desea una división entera y trunca el resultado eliminando los decimales, por lo que devuelve siempre un número entero. Cuando realizas un cast double, le dices al compilador que no trunque ese resultado y devuelve la división original. Para generar un número entre 0 y 10, solo se genera un número entre 0 y 1 y se multiplica por 10. A éste resultado lo formateamos con DecimalFormat para que redondee a dos decimales y lo convertimos a Double. El resultado, números entre 0 y 10 con 2 decimales. Código
Salu2. Título: Re: Random de 0 a 10 con dos decimales Publicado por: Baal_30 en 24 Febrero 2015, 09:05 am Uf el segundo código me lía mucho jaja aún no entiendo bien bien los cast :/
Muchas gracias por las respuestas ;) Título: Re: Random de 0 a 10 con dos decimales Publicado por: 3n31ch en 24 Febrero 2015, 16:10 pm Muchas gracias por el dato del nextInt(), si les soy sincero no utilizo mucho random (y cuando lo aprendí siempre lo hice así como lo hago ahora) ;D
Título: Re: Random de 0 a 10 con dos decimales Publicado por: Usuario Invitado en 24 Febrero 2015, 16:31 pm @Baal. En realidad no es difícil de entender el código que puse anteriormente. Tampoco añadí algún Cast, en el primero sí hice un cast a Double. Sobre los casts, simplemente se fuerza a un tipo de dato convertirse en otro.
El código anterior se podría traspasar más limpio de la siguiente manera: Código
PD: Si solucionaste tu problema no olvides marcar el título con un check verde. Salu2. Saludos! Título: Re: Random de 0 a 10 con dos decimales Publicado por: Baal_30 en 25 Febrero 2015, 08:59 am @Baal. En realidad no es difícil de entender el código que puse anteriormente. Tampoco añadí algún Cast, en el primero sí hice un cast a Double. Sobre los casts, simplemente se fuerza a un tipo de dato convertirse en otro. El código anterior se podría traspasar más limpio de la siguiente manera: Código
PD: Si solucionaste tu problema no olvides marcar el título con un check verde. Salu2. Saludos! Gracias Gus! Lo veía algo más complejo son los métodos que no conocía :P Lo que no entiendo en este código, es que hace el método "buildNumberWithTwoDecimals" si solamente retorna lo que retorna el "generateNumber" ¿no? Un saludo ¡! Título: Re: Random de 0 a 10 con dos decimales Publicado por: Usuario Invitado en 25 Febrero 2015, 11:41 am Quizás en este ejemplo tan pequeño no es necesario abastraer y encapsular. El objetivo de ello es ocultar la implementacion de generateNumber, por ello lo definimos private. En ocasiones más avanzadas, tendrás que hacerlo para abstraer tu capa de acceso a datos por ejemplo con el uso de servicios que oculten la implementación del DAO o factorías. Ésto ya lo entenderás más adelante ^^.
Título: Re: Random de 0 a 10 con dos decimales Publicado por: Baal_30 en 26 Febrero 2015, 09:11 am Aah okey! eso ya se me escapa a mi nivel :/ Pero tomo nota :) Muchas gracias :D
|