无法转换' double'到'漂浮'但我没有使用双倍

时间:2015-08-30 14:42:19

标签: c# floating-point 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'到了'漂浮'。我无法看到我在哪里使用双,我需要使用浮点数,因为用户可以输入像3.147这样的十进制数。

我做错了什么?

6 个答案:

答案 0 :(得分:4)

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;

答案 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

的double类型