Math.Pow给出“不能隐式地将类型'double'转换为'float'”错误

时间:2011-01-03 13:23:35

标签: c# math binary

在这个程序中,我试图创建一个简单的计算器。但是,在到达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 个答案:

答案 0 :(得分:5)

Math.Pow的返回值为double。程序中的变量powerfloat,其范围和准确度较小。

您应该将power定义为double

答案 1 :(得分:4)

Math.Pow使用double参数。如错误所示,从doublefloat没有隐式转换,因此将结果显式转换为float:

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

修改
更正了转换订单

答案 2 :(得分:1)

使用double代替float代替变量。

float数据类型的精度非常有限,因此舍入误差(在浮点算术中始终存在)相对较大。

你看到正方形和平方根的错误结果的原因是你根本不会显示结果。将每个格式字符串中的{0}之一更改为{1}

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

答案 3 :(得分:0)

您可以尝试显式地将Math.Pow的结果转换为float:

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

你也可以使用float的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);