无法将 '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.Powreturns一个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 的双精度类型