En este programa, estoy tratando de crear una simple calculadora. Sin embargo, me parece que no puede encontrar una manera de superar el error mencionado anteriormente, al llegar a la Math.Pow línea.

namespace BinaryCalc
{
    class Binary
    {
        public static void Main()
        {

        int addition,subtraction;
        float division, multiplication, power, sqrt;

        int x;
        int y;
        x = 10;
        y = 7;

        //Console.WriteLine("Please enter a number for x");
        //string line = Console.ReadLine();
        //int x = int.Parse(line);

        //Console.WriteLine("Please enter a number for y");
        //string line2 = Console.ReadLine();
        //int y = int.Parse(line2);


        addition = (int)x + (int)y;
        subtraction = (int)x - (int)y;
        division = (float)x / (float)y;
        multiplication = (float)x * (float)y;

        power = Math.Pow(x,2);
        sqrt = Math.Sqrt(x);


        Console.WriteLine(" Addition results in {0}", addition);
        Console.WriteLine(" Subtraction results in {0}", subtraction);
        Console.WriteLine(" Division results in {0}", division);
        Console.WriteLine(" Multiplication results in {0}", multiplication);
        Console.WriteLine(" {0} squared results in {0}",x, power);
        Console.WriteLine(" Square root of {0} is: {0}", x, sqrt);

        }
    }
}

OriginalEl autor Alexandros | 2011-01-03

4 Comentarios

  1. 4

    De matemáticas.Pow utiliza un double argumento. Como el error dice que no hay ningún implícito conversión de double a float, para convertir el resultado explícitamente a float:

    power = (float)Math.Pow(x, 2);

    EDITAR

    se ha corregido el orden de conversión

    Gracias por la rápida respuesta. Yo en realidad ya lo probé pero a pesar de que el error desaparece, me da una respuesta equivocada. Mismo ocurre con la siguiente línea que contiene la raíz cuadrada.
    ¿por qué no puede declarar power y sqrt como doble?
    El problema no es el argumento, pero el valor de retorno – el error dice que no hay conversión de doble a flotar, no float a double.
    eso es porque usted utiliza {0} dos veces. El segundo debe ser {1}
    Muchas gracias por la ayuda. En realidad esto era lo que estaba causando. Muy tonta de mí.

    OriginalEl autor Hans Kesting

  2. 5

    El valor de retorno de Math.Pow es un double. La variable power en su programa es una float, que tiene un menor rango y precisión.

    Debe definir power a ser un double.

    O solo caso a float. Si un programador comete este error aquí sin darse cuenta de la diferencia entre float y double realmente no importa en absoluto, supongo.
    Casting para float abre la puerta a excepciones. Si el OP requiere que el resultado final se ajuste en un float, entonces esto puede ser parte de la solución, pero no por sí mismo. Adicional «qué hacer si no se ajusta a la lógica en la que sería necesario.
    Jon, ¿qué excepciones? Si no cabe se pone fija en el infinito, o 0. Recuerde, estamos hablando de punto flotante de aquí y no los tipos enteros. También, busque en la clase de la OP publicado. Que esperas para probar este con números alrededor de 1e200 en lugar de 25, o algo así?
    Tienes razón acerca de las excepciones (no lo habrá para este lanzamiento específicos, como se indica en msdn.microsoft.com/en-us/library/yht2cx7b.aspx). Y no espero que el OP para hacer eso. Pero ¿por qué usar una solución oculta trampas cuando no es uno con ninguno?

    OriginalEl autor Jon

  3. 1

    Uso double en lugar de float para las variables.

    La float tipo de datos tiene bastante precisión limitada, por lo que los errores de redondeo (que siempre están presentes en aritmética de punto flotante) son relativamente grandes.

    La razón por la que ven el mal resultado del cuadrado y la raíz cuadrada, es que nunca mostrar el resultado en absoluto. El cambio de uno de los {0} en cada cadena de formato en {1}:

    Console.WriteLine(" {0} squared results in {1}",x, power);
    Console.WriteLine(" Square root of {0} is: {1}", x, sqrt);

    OriginalEl autor Guffa

  4. 0

    Usted puede tratar explícitamente de fundición de los resultados de Matemáticas.Pow flotar como tales:

    power = (float) Math.Pow(x, 2);

    También puede utilizar float del método TryParse para tratar y analizar el resultado de las Matemáticas.Pow:

    float.TryParse(Math.Pow(x, 2).ToString(), out power);

    También, es posible que desee cambiar el formato de parámetro de cadena de números en los dos últimos de la Consola.Método WriteLine de llamadas. Se debe leer como este:

    Console.WriteLine(" {0} squared results in {1}",x, power);
    Console.WriteLine(" Square root of {0} is: {1}", x, sqrt);
    Ir a través de una cadena con TryParse está loco, sin duda.
    Puedo entender por qué usted piensa que el TryParse es menor que el óptimo, pero ¿por qué la downvote así? No downvotes para incorrecta y/o perjudiciales respuestas? Es una respuesta válida al problema (en combinación con su error en el formato de cadena).

    OriginalEl autor avanek

Dejar respuesta

Please enter your comment!
Please enter your name here