Math.Pow выдает ошибку "Не удается неявно преобразовать тип 'double' в 'float" " - PullRequest
2 голосов
/ 03 января 2011

В этой программе я пытаюсь создать простой калькулятор. Однако я не могу найти способ преодоления вышеупомянутой ошибки при достижении линии Math.Pow.

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);

        }
    }
}

Ответы [ 4 ]

5 голосов
/ 03 января 2011

Возвращаемым значением Math.Pow является double. Переменная power в вашей программе - это float, которая имеет меньший диапазон и точность.

Вы должны определить power как double.

4 голосов
/ 03 января 2011

Math.Pow использует аргумент double. Как говорится в сообщении об ошибке, неявное преобразование из double в float не выполняется, поэтому конвертируйте результат явно в число с плавающей точкой:

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

EDIT
исправлен порядок конвертации

1 голос
/ 03 января 2011

Используйте double вместо float для своих переменных.

Тип данных float имеет довольно ограниченную точность, поэтому ошибки округления (которые всегда присутствуют в арифметике с плавающей запятой) относительно велики.

Причина, по которой вы видите неправильный результат квадратного и квадратного корня, заключается в том, что вы никогда не показываете результат вообще.Измените один из {0} в каждой строке формата на {1}:

Console.WriteLine(" {0} squared results in {1}",x, power);
Console.WriteLine(" Square root of {0} is: {1}", x, sqrt);
0 голосов
/ 03 января 2011

Вы можете попробовать явным образом привести результаты Math.Pow к числу с плавающей точкой:

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

Вы также можете использовать метод TryParse с плавающей точкой, чтобы попытаться проанализировать результат Math.Pow:

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

Кроме того, вы можете изменить номера параметров строки формата в последних двух вызовах метода Console.WriteLine. Они должны читать так:

Console.WriteLine(" {0} squared results in {1}",x, power);
Console.WriteLine(" Square root of {0} is: {1}", x, sqrt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...