[ Foro de C# ]
Hola buneas es que me dejaron una calculdaora basica con suma, resta, multiplicacion, division y potencia el codigo lo hice pero como me piden que la multiplicacion el resultado se a en float, la division en double, es donde tengo el problema ya que los resultados son erroneos por que las entradas de datos las toma como enteros ejemplo multiplicar 1.5 * 0.5 = 0 , por lo que toma como 1*0 en la divison es igual ejemplo 8/1.5 = 8 el decimal lo toma como entero
miren aqui esta el codigo
//Programa de Operaciones
namespace Operaciones
{
class Program
{
//metodos para devolver el valor
static int Suma(int a1, int a2)
{
return a1 + a2;
}
static int Resta(int a1, int a2)
{
return a1 - a2;
}
static float Multiplicacion(float a1, float a2)
{
return a1 * a2;
}
static double Division(double a1, double a2)
{
if (a2 != 0)
{// Si a2 es distinto de 0...
return a1 / a2;
}
return 0;
}
static int Potencia(int a1, int a2)
{
int pot = a1;
for (int i = 1; i < a2; i++)
{
pot *= a1;
}
return pot;
}
// PRINCIPAL DEL PROGRAMA...
static void Main(string[] args)
{
int s1, s2;
int r1, r2;
float m1, m2;
double d1, d2;
int p1, p2;
int opcion;
Console.Write("1º) Suma" + "\n" + "2º) Resta" + "\n" + "3º) Multiplicación" + "\n" + "4º) División" + "\n" + "5º) Potencia " + "\n");
Console.Write("Seleccione una opción: \n");
opcion = Convert.ToInt16(Console.Read());
opcion -= 0x30;
switch (opcion)
{
case 1:
Console.WriteLine("Escriba el primer entero: ");
Console.ReadLine();
s1 = (Convert.ToInt32(Console.Read())) - 0x30;
Console.WriteLine("Escriba el segundo entero:\n");
Console.ReadLine();
s2 = (Convert.ToInt32(Console.Read())) - 0x30;
Console.WriteLine("La suma es: {0}", Suma(s1, s2));
break;
case 2:
Console.WriteLine("Escriba el primer entero:");
Console.ReadLine();
r1 = (Convert.ToInt32(Console.Read())) - 0x30;
Console.WriteLine("Escriba el segundo entero: ");
Console.ReadLine();
r2 = (Convert.ToInt32(Console.Read())) - 0x30;
Console.WriteLine("La resta es:{0}", Resta(r1, r2));
break;
case 3:
Console.WriteLine("Escriba el primer numero:");
Console.ReadLine();
m1 = (Convert.ToSingle(Console.Read())) - 0x30;
Console.WriteLine("Escriba el segundo numero: ");
Console.ReadLine();
m2 = (Convert.ToSingle(Console.Read())) - 0x30;
Console.WriteLine("La multiplicacion es:{0}", Multiplicacion(m1, m2));
break;
case 4:
Console.WriteLine("Escriba el primer numero:");
Console.ReadLine();
d1 = (Convert.ToDouble(Console.Read())) - 0x30;
Console.WriteLine("Escriba el segundo numero: ");
Console.ReadLine();
d2 = (Convert.ToDouble(Console.Read())) - 0x30;
Console.WriteLine("La division es:{0}", Division(d1, d2));
break;
case 5:
Console.WriteLine("Escriba el primer entero:");
Console.ReadLine();
p1 = (Convert.ToInt32(Console.Read())) - 0x30;
Console.WriteLine("Escriba el segundo entero: ");
Console.ReadLine();
p2 = (Convert.ToInt32(Console.Read())) - 0x30;
Console.WriteLine("La potencia es:{0}", Potencia(p1, p2));
break;
}
Console.ReadKey();
}
}
}
Porfa es que apenas empieso con la programacion
De antemano gracias
Esta consulta está repetida. Supongo que primero preguntaste de forma anónima y luego preferiste ser avisado cuando hubiera respuesta. Borraré la otra pregunta.
En primer lugar, no uses Console.Read, que puede tener efectos colaterales que no esperes. Si miras la referencia oficial, verás que lee EL SIGUIENTE CARÁCTER, no todo un número:
http://msdn.microsoft.com/es-es/library/system.console.read(v=vs.110).aspx
De modo que los números con decimales los leerá mal, porque sólo tomará la siguiente cifra.
Por eso, usa Console.ReadLine y así no tendrás que restarle nada para "pelear con el código ASCII":
double d1 = Convert.ToDouble( Console.ReadLine() );
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)