class Program
{
static float vSphere(float radi)
{
float radius = Math.Pow(radi, 3); //line 14
float vol = (4 / 3) * 3.14 * radius; //line 15
return vol;
}
static void Main(string[] args)
{
// Work out the volume of sphere
Console.WriteLine("Please specify a radius: ");
float user_radius = float.Parse(Console.ReadLine());
float answer = vSphere(user_radius);
Console.WriteLine("The sphere is: ");
Console.WriteLine(answer);
}
}
这是我尝试编写的程序的C#代码,用于计算球体的体积。
在第14行和第15行,我被告知我无法隐含地转换为' double'到了'漂浮'。我无法看到我在哪里使用双,我需要使用浮点数,因为用户可以输入像3.147这样的十进制数。
我做错了什么?
答案 0 :(得分:4)
Math.Pow
方法始终返回double
值,因此您需要将其强制转换回float
:
float radius = (float)Math.Pow(radi, 3);
字面值3.14
是double
值。您可以使用f
后缀将其设为float
值:
float vol = (4 / 3) * 3.14f * radius;
请注意,表达式4 / 3
是使用int
值计算的,因此结果将是1
,而不是您所期望的1.333333
。也可以使用float
值:
float vol = (4f / 3f) * 3.14f * radius;
正如rbaleksandar所指出的,Math
类中有一个pi常量,你应该使用而不是写出来。它虽然是double
值,但您需要将其转换为float
:
float vol = (4f / 3f) * (float)Math.PI * radius;
答案 1 :(得分:2)
第14行:Math.Pow
返回double
第15行:编译器默认将(4 / 3) * 3.14 * radius
表达式推断为double
类型。使用f
文字后缀告诉编译器它是一个浮点数:
float vol = (4 / 3) * 3.14f * radius;
答案 2 :(得分:1)
如果您将查看Math.Pow的定义,那么您将看到它需要两个双参数并返回一个double。你需要像这样投射:
float radius = (float)Math.Pow(radi, 3);
没有从double到float的隐式转换,因此您需要将其转换为float。
类似地
float vol = (4.0 / 3.0) * 3.14f * radius;
答案 3 :(得分:0)
当Math.Pow返回一个double值时,你应该显式地将它转换为float float radius =(float)Math.Pow(radi,3);
答案 4 :(得分:0)
试试这个......
static float vSphere(float radi)
{
float radius = (float)Math.Pow(radi, 3); //line 14
float vol = (4f / 3f) * 3.14f * radius;; //line 15
return vol;
}
答案 5 :(得分:0)
Math.Pow
返回一个需要转换为float