在这个程序中,我试图创建一个简单的计算器。但是,在到达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);
}
}
}
答案 0 :(得分:5)
Math.Pow
的返回值为double
。程序中的变量power
为float
,其范围和准确度较小。
您应该将power
定义为double
。
答案 1 :(得分:4)
Math.Pow使用double
参数。如错误所示,从double
到float
没有隐式转换,因此将结果显式转换为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);