[DUDA] Problema al transformar Cº a Fº en un programa.

Iniciado por fjlopezc17, 5 Agosto 2016, 13:23 PM

0 Miembros y 2 Visitantes están viendo este tema.

fjlopezc17

Hola a todos ::), primero me gustaría decir que soy nuevo en el foro y principiante de Java así que no me maten. :-\

Estaba creando un programa que me transformase los grados Celsius/Centígrados a Fahrenheit y viceversa. Al pasar de Cº a Fº la formula sería:

Fº = Cº * (9/5) + 32

Pero me dí cuenta que por ejemplo 35ºC son 95ºF (visto en Google) mientras que en mi programa da 67ºF.  :o

Esto quiere decir que en mi programa solo se sumaron los 32 de la formula pero no multiplicó los 9/5 por los Celsius. No entiendo por qué  :huh: así que les dejo el código:

package Experimentillos;
import java.util.Scanner;

public class FahrenheitCelsius {

static double Cº_Fº(double num){
num = num*(9/5)+32;
   return num;
}

static double Fº_Cº(double num){
num = (num-32)*(5/9);
   return num;
}

public static void main(String[] args){
Scanner S = new Scanner(System.in);

int op;
double celsius, fahren;

do{
System.out.println("Elija una opción: ");
System.out.println("1. Cº => Fº");
System.out.println("2. Fº => Cº");
System.out.println("3. Salir");
op = S.nextInt();
}while(op > 3 || op < 1);

switch(op){
case 1:
System.out.println("¿Cuántos Cº?");
celsius = S.nextInt();
fahren = Cº_Fº(celsius);
System.out.println(celsius+" Cº son "+fahren+" Fº.");
break;
case 2:
System.out.println("¿Cuántos Fº?");
fahren = S.nextInt();
celsius = Fº_Cº(fahren);
System.out.println(fahren+" Fº son "+celsius+" Cº.");
break;
case 3:
}
}
}


Gracias de antemano. Saludos!!!

ivancea96

(9/5) es 1, ya que son enteros, y se redodnea hacia abajo.
Debieras poner (9.0/5.0), para que sean tratados como coma flotante.
Otra opción, es quitar los paténtesis. num*9/5 + 32.

+ 1 Oculto(s)

hay funciones para el redondeo para arriba y abajo


si no me equivoco para redondear hacia abajo es cell()


saludos

ivancea96

Cita de: rn3w en  5 Agosto 2016, 16:40 PM
hay funciones para el redondeo para arriba y abajo


si no me equivoco para redondear hacia abajo es cell()


saludos
Así es, pero no cambia nada tras una división deenteros.

Por cierto, en vez de 9/5, te puede ser más cómodo poner 1.8.

hectornunezrivas

Hola.
Yo lo h realizado de la siguiente forma.

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
      Scanner sc=new Scanner(System.in);
      System.out.println("Seleccione una conversion");
      System.out.println("1. ºC  a  ºF");
      System.out.println("2. ºF  a  ºC");
      int n=sc.nextInt();
      if(n==1){
          System.out.println("Ingresa grados centigrados");
          int c=sc.nextInt();
          double f=(c*9/5)+(32);
          System.out.println(c+"ºC equivale a "+f+"ºF");
      }else{
          System.out.println("Ingresa grados fahrenheit");
          int f=sc.nextInt();
          double c=(f-32)*5/9;
          System.out.println(f+"ºF equivale  a "+c+"ºC");
      }
    }
}

Espero y te sirva saludos.

fjlopezc17

Buenas tardes. Finalmente he solucionado el problema al poner el decimal .0 como bien decía ivancea96. Una cosa más aprendida, muchas gracias por sus respuestas.

Saludos