Bienvenido: ( Identificarse | Registrarse )      
Foros de Trucos Windows
 
Closed TopicStart new topicStart Poll

Outline · [ Estándar ] · Lineal+

> Java: Obtener numero con decimales

Marzzipan
post Apr 6 2008, 05:15 AM
Publicado: #1


Miembro
**

Grupo: Members
Mensajes: 38
Registrado: 21-July 06
Miembro nº: 174.802



Buenas noches a todo el foro, esta vez tengo una duda media boba pero es que no le encuentro solución confused.gif . Mi programa trata practicamente solo de multiplicar, dividr y sumar, pero el problema radica en que los número que me de tendrán varios decimales y es ahí donde me pierdo ya que siempre me lo da mal. Me preguntaba si alguien me podría dar un ejemplo de programa que utilice número decimal al hacer una operación y si existe algún codigo que restringa el número de decimales a dos.

En mi programa utilizo double:

CODE
double calificacionasistencia=0;
double calificacionparticipacion=0;
double calificaciontareas=0;
double calificacionexamen=0;
double calificaciontotaldeparcial=0;


y luego para hacer las operaciones:

CODE
calificacionasistencia=((asistencia/asistenciatotal)*asistenciaalumno)/10;
calificacionparticipacion=((participacion/participaciontotal)*participacionalumno)/10;
calificaciontareas=((tareas/tareatotal)*tareaalumno)/10;
calificacionexamen=(examen*examenalumno)/100;
calificaciontotaldeparcial=calificacionasistencia + calificacionparticipacion + calificaciontareas + calificacionexamen;


Y como ya les dije me da mal las operaciones.

Espero que estén bien y gracias de antemano.


User is offlineProfile CardPM
Go to the top of the page
+Quote Post
rob1104
post Apr 6 2008, 08:11 AM
Publicado: #2


Xbox Live... The best thing ever happened around videogames
Group Icon

Grupo: Moderadores
Mensajes: 1.621
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342



A que te refieres con que hace los calculos mal?, para redondear decimales en java puedes usar la clase DecimalFormat, que nos permite mostrar los números en pantalla con el formato que queramos, es decir, con cuántos decimales, si queremos punto o coma para los decimales, etc. , la forma de uso es muy simple:
CODE

import java.text.DecimalFormat;  

public class prueba
{
public static void main(String args[])
{
 double pi;
 pi=3.1416;
 
 //Se crea el objeto de la clase y se asigna el formato
 //En este caso 4 cifras enteras y 2 decimales
 DecimalFormat RedondearADos = new DecimalFormat("####.##");
 
 System.out.println("Numero sin redondear: " + pi);
 //Llamamos al metodo format del objeto creado para que aplique el redondeo
 System.out.println("Numero redondado a dos decimales: " + RedondearADos.format(pi));
 
}
}


bye1.gif


User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Marzzipan
post Apr 6 2008, 08:05 PM
Publicado: #3


Miembro
**

Grupo: Members
Mensajes: 38
Registrado: 21-July 06
Miembro nº: 174.802



Muchas gracias por responder, pero no entendí lo de Pi confused.gif . Supongo que es para el ejemplo de solo dos decimales. Creo que lo mal expliqué wacko.gif (como siempre), lo que pasa es que mi programa le pide al usuario que marque cierto porcentaje para las asistencias, participaciones, tareas y examen y luego según lo que el alumno haya obtenido en cada uno(previamente puesto por el usuario), hace la operación y obtiene los puntos de cada uno con base en 10, los suma y muestra la calificación.

El problema es que las operaciones pueden dar números con muchísimos decimales y creo que el double no sirve para eso y siempre me da mal los resultados (saqué la calificación previamente y es muy diferente de lo que da el programa whistling.gif ).

Aca dejo el codigo fuente:

CODE
import java.io.*;
import javagently.*;
class Subprograma {
public static void main(String [] args) throws IOException {
 double calificacionasistencia=0;
 double calificacionparticipacion=0;
 double calificaciontareas=0;
 double calificacionexamen=0;
 double calificaciontotaldeparcial=0;
 InputStreamReader entrada=new InputStreamReader(System.in);
 BufferedReader in=Text.open(System.in);
 System.out.println("Escriba los porcentajes segun su criterio de calificacion:");
 System.out.println();
 System.out.println("***NOTA***");
 System.out.println();
 System.out.println("<Si para Usted no cuenta la calificacion de la asistencia o cualquier otra,");
 System.out.println("simplemente ponga el numero 0 y no contara como calificacion>");
 System.out.println();
 System.out.println();
 System.out.println("Ingrese el porcentaje de Asistencia: ");
 System.out.println();
 int asistencia=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el numero de Asistencias totales del parcial: ");
 System.out.println();
 int asistenciatotal=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el porcentaje de Participacion: ");
 System.out.println();
 int participacion=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el total de las participaciones que debe tener cada alumno: ");
 System.out.println();
 int participaciontotal=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el porcentaje de Tareas: ");
 System.out.println();
 int tareas=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el numero de Tareas Totales del parcial: ");
 System.out.println();
 int tareatotal=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el porcentaje de Examen: ");
 System.out.println();
 int examen=Text.readInt(in);
 System.out.println();
 System.out.println();
 Text.prompt("Escriba el primer nombre del alumno: "); String nombre=Text.readString(in);
 System.out.println();
 Text.prompt("Escriba el primer apellido del alumno: "); String apellido1=Text.readString(in);
 System.out.println();
 Text.prompt("Escriba el segundo apellido del alumno: "); String apellido2=Text.readString(in);
 System.out.println();
 System.out.println();
 System.out.println("Ingrese el numero de Asistencias totales del alumno: ");
 System.out.println();
 int asistenciaalumno=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el total de participaciones del alumno: ");
 System.out.println();
 int participacionalumno=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el total de tareas entregadas por alumno: ");
 System.out.println();
 int tareaalumno=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese la calificacion de su examen: ");
 System.out.println();
 int examenalumno=Text.readInt(in);
 System.out.println();
 calificacionasistencia=((asistencia/asistenciatotal)*asistenciaalumno)/10;
 calificacionparticipacion=((participacion/participaciontotal)*participacionalumno)/10;
 calificaciontareas=((tareas/tareatotal)*tareaalumno)/10;
 calificacionexamen=(examen*examenalumno)/100;
 calificaciontotaldeparcial=calificacionasistencia + calificacionparticipacion + calificaciontareas + calificacionexamen;
 PrintWriter fout=Text.create("Calificaciones Parciales.txt");
 System.out.println();
 System.out.println("El promedio ha sido impreso en el archivo Calificaciones.txt");
 fout.println("El promedio del alumno " + nombre + " " + apellido1 + " " + apellido2 + " es " + calificaciontotaldeparcial);
 fout.close();
}
}


Les ruego que no lo tomen a mal, y muchísimas gracias por su tiempo.


User is offlineProfile CardPM
Go to the top of the page
+Quote Post
rob1104
post Apr 6 2008, 08:20 PM
Publicado: #4


Xbox Live... The best thing ever happened around videogames
Group Icon

Grupo: Moderadores
Mensajes: 1.621
Registrado: 7-March 05
Desde: Matamoros, Tamaulipas, Mexico
Miembro nº: 93.342



Si si, el tipo double sirve para muchos decimales (mas de los que te imaginas), mira talvez si hace las operaciones, pero como te muestra muchos decimales (generalmente en base a E) es por eso que piensas que loshace mal, porque no redondeas los resultados a 2 decimales, con la clase que te puse anteriormente, es facil, lo que pasa es que lo hice con pi para ejemplo, pero la sintaxis seria:
CODE
DecimalFormat redondeo = new DecimalFormat("########.##"");
redondeo.format(variable); //Esto redondea la variable que quieras a 2 decimales


Si aun no sale, pegame lo que arroja tu programa con datos reales, y tambien lo que deberia arrojar(que tu calculaste), ahorita no tengo compilador java a la mano pero espero poder ayudarte.

Saludos
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Marzzipan
post Apr 6 2008, 08:30 PM
Publicado: #5


Miembro
**

Grupo: Members
Mensajes: 38
Registrado: 21-July 06
Miembro nº: 174.802



Muchas gracias Rob ya puse el código para que me muestre solo dos dígitos de punto decimal, aunque me sigue mostrando mal el resultado, algo debí haber puesto mal, ni hablar ahora mismo lo reparo biggrin20jy.gif .
Muchas gracias de nuevo por tu ayuda.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Marzzipan
post Apr 6 2008, 09:08 PM
Publicado: #6


Miembro
**

Grupo: Members
Mensajes: 38
Registrado: 21-July 06
Miembro nº: 174.802



Ya encontré el error, me arroja mal el resultado porque no lee los decimales nunca, aun estoy con el mismo problema sad.gif , hice un pequeño programa para ver si era cierto y si... lamentablemente aun no me lee los deciamles:

CODE
import java.io.*;
import javagently.*;
import java.text.DecimalFormat;
class Lala {
public static void main(String [] args) throws IOException {
 
 double calificacionasistencia=0;
 DecimalFormat redondeo = new DecimalFormat("########.##");
 redondeo.format(calificacionasistencia);
 InputStreamReader entrada=new InputStreamReader(System.in);
 BufferedReader in=Text.open(System.in);
 System.out.println("Ingrese el porcentaje de Asistencia: ");
 System.out.println();
 int asistencia=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el numero de Asistencias totales del parcial: ");
 System.out.println();
 int asistenciatotal=Text.readInt(in);
 System.out.println();
 System.out.println("Ingrese el numero de Asistencias totales del alumno: ");
 System.out.println();
 int asistenciaalumno=Text.readInt(in);
 System.out.println();
 calificacionasistencia=((asistencia/asistenciatotal)*asistenciaalumno)/10;
 System.out.println("El promedio es " + calificacionasistencia);
}
}


En el primero pongo 20% (Que es lo que vale para mi en dado caso la asistencia) luego pongo que son 9 asistencias que debe tener el alumno en total, por último pongo que solo tuvo 7 asistencias:

Entonces deberá dividir 20 entre las 9 asistencias para saber cuanto equivale cada una y luego lo multiplica por el numero de veces que asistió el alumno, en este caso 7.

Debería ser así 20/9 = 2.2222222222 * 7 = 15.55555555556

Pero mi programa me arroja el resultado de 14 porque lo entiende así:

20/9 = 2.??????? * 7 = 14

Espero que puedan ayudarme ohmy.gif .

Jejeje lo edité porque resolví el problema, solo cambié todos los int por double y ahora si me arroja el resultado bien. Muchas gracias victory.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

 
Closed TopicTopic OptionsStart new topic

Collapse

> Topicos similares

java - Separar varios paneles entre si con una ... alemag 42 0 Jun 26 2008, 01:12 PM
By: alemag
java - dos dudas con busqueda con javahelp alemag 58 1 Jun 19 2008, 05:04 PM
By: alemag
problemas con java runtime undying 71 1 Jun 15 2008, 05:52 PM
By: Kbite

Google
Web www.trucoswindows.net