c# - 无法将 'double' 转换为 'float' 但我没有使用 double

标签 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”隐式转换为“float”。我看不到我在哪里使用 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;

关于c# - 无法将 'double' 转换为 'float' 但我没有使用 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297727/

相关文章:

c# - ERR_TOO_MANY_REDIRECTS ASP.NET C#超过100次重定向

c# - 将 IEnumerable<byte[]> 转换为 byte[]

c++ - 将数据从逗号分隔的文本文件加载到二维数组?

c# - DllImport 返回空终止字符串 AccessViolationException

c# - 在运行时传递 Type 参数

math - float 学有问题吗?

c++ - 编译时的浮点运算

c - 为什么c变量总是输出0?

java - 字符串精度

java - 使用 double 仅显示小数点后两位数