Math.Pow gives “Cannot implicitly convert type 'double' to 'float' ” error

前端 未结 4 789
暖寄归人
暖寄归人 2021-01-21 12:23

In this program I am trying to create a simple calculator. However, I can\'t seem to find a way to overcome the aforementioned error when reaching the Math.Pow line

相关标签:
4条回答
  • 2021-01-21 13:13

    You can try explicitly casting the results of Math.Pow to float as such:

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

    You can also use float's TryParse method to try and parse the result of Math.Pow:

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

    Also, you might want to change the format string parameter numbers on the last two Console.WriteLine method calls. They should read like this:

    Console.WriteLine(" {0} squared results in {1}",x, power);
    Console.WriteLine(" Square root of {0} is: {1}", x, sqrt);
    
    0 讨论(0)
  • 2021-01-21 13:21

    Use double instead of float for your variables.

    The float data type has quite limited precision, so the rounding errors (that are always present in floating point arithmetics) are relatively large.

    The reason that you see the wrong result of the square and square root, is that you never show the result at all. Change one of the {0} in each format string into {1}:

    Console.WriteLine(" {0} squared results in {1}",x, power);
    Console.WriteLine(" Square root of {0} is: {1}", x, sqrt);
    
    0 讨论(0)
  • 2021-01-21 13:25

    Math.Pow uses a double argument. As the error says, there is no implicit conversion from double to float, so convert the result explicitly to float:

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

    EDIT
    corrected the conversion order

    0 讨论(0)
  • 2021-01-21 13:26

    The return value of Math.Pow is a double. The variable power in your program is a float, which has a smaller range and accuracy.

    You should define power to be a double.

    0 讨论(0)
提交回复
热议问题