不能转换'& # 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这样的十进制数。

我做错了什么?

不能转换'& # 39;浮动# 39;但我没有用double

Math.Pow方法总是返回double值,因此您需要将其强制转换回float:

float radius = (float)Math.Pow(radi, 3);

字面值3.14double的值。您可以使用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