无法将 'double' 转换为 'float' 但我没有使用 double
Cannot convert 'double' to 'float' but I am not using double
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 的定义,您会发现它需要两个双精度参数和 returns 一个双精度参数。你需要像这样投射它:
float radius = (float)Math.Pow(radi, 3);
没有从 double 到 float 的隐式转换,因此您需要将其转换为 float。
同样
float vol = (4.0 / 3.0) * 3.14f * radius;
第 14 行:Math.Pow
returns一个double
第 15 行:(4 / 3) * 3.14 * radius
表达式默认被编译器推断为 double
类型。使用 f
文字后缀告诉编译器它是一个浮点数:
float vol = (4 / 3) * 3.14f * radius;
Math.Pow
方法总是 returns 一个 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
class 中有一个 pi 常数,您应该使用它而不是写出来。这是一个 double
值,所以你需要将它转换为 float
:
float vol = (4f / 3f) * (float)Math.PI * radius;
作为 Math.Pow returns 一个双精度值,你应该明确地将它转换为浮动
浮动半径 = (浮动)Math.Pow(半径, 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
returns 需要转换回 float 的双精度类型
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 的定义,您会发现它需要两个双精度参数和 returns 一个双精度参数。你需要像这样投射它:
float radius = (float)Math.Pow(radi, 3);
没有从 double 到 float 的隐式转换,因此您需要将其转换为 float。
同样
float vol = (4.0 / 3.0) * 3.14f * radius;
第 14 行:
Math.Pow
returns一个double
第 15 行:
(4 / 3) * 3.14 * radius
表达式默认被编译器推断为double
类型。使用f
文字后缀告诉编译器它是一个浮点数:float vol = (4 / 3) * 3.14f * radius;
Math.Pow
方法总是 returns 一个 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
class 中有一个 pi 常数,您应该使用它而不是写出来。这是一个 double
值,所以你需要将它转换为 float
:
float vol = (4f / 3f) * (float)Math.PI * radius;
作为 Math.Pow returns 一个双精度值,你应该明确地将它转换为浮动 浮动半径 = (浮动)Math.Pow(半径, 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
returns 需要转换回 float 的双精度类型