不能转换'& # 39;浮动# 39;但我没有用double
本文关键字:有用 double 浮动 转换 不能 | 更新日期: 2023-09-27 18:10:22
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'转换为'float'。我不知道我在哪里使用了双精度数,我需要使用浮点数,因为用户可以输入像3.147这样的十进制数。
我做错了什么?
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;
-
第14行:
Math.Pow
返回double
-
第15行:默认情况下,编译器将
(4 / 3) * 3.14 * radius
表达式推断为double
类型。使用f
字面值后缀告诉编译器它是一个浮点数:float vol = (4 / 3) * 3.14f * radius;
如果您将查看数学的定义。然后你会看到它接受两个双精度参数并返回一个双精度值。您需要像这样强制转换它:
float radius = (float)Math.Pow(radi, 3);
没有从double到float的隐式转换,因此需要将其强制转换为float。
同样float vol = (4.0 / 3.0) * 3.14f * radius;
As Math。Pow返回一个双精度值,您应该显式地将其强制转换为float byfloat radius = (float)战俘(x射线检验,3);
试试这个…
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;
}
Math.Pow
返回一个double类型,您需要将其强制转换为float