C# 为什么32.32是双精度的,而不是浮动的?

C# 为什么32.32是双精度的,而不是浮动的?,c#,C#,这是我的C#代码,它生成两个c1,c2)类型为圈的实例 using System; namespace ClassCircle { class Circle { float radius; public Circle(float n) { Console.WriteLine("a circle of radius {0} has been created",n); radius = n

这是我的C#代码,它生成两个c1c2)类型为圈的实例

using System;
namespace ClassCircle
{
    class Circle
    {
        float radius;
        public Circle(float n)
        {
            Console.WriteLine("a circle of radius {0} has been created",n);
            radius = n;
        }
        public double getArea()
        {
            double area = Math.PI * radius * radius;
            return area;
        }
        public double getPerimeter()
        {
            double peri = 2 * Math.PI * radius;
            return peri;
        }
        public void printInfo()
        {
            Console.WriteLine("Perimeter = {0}", getPerimeter());
            Console.WriteLine("Area = {0}", getArea());
        }
        static void Main(string[] args)
        {
            Console.WriteLine("{0}", Math.PI.GetType());
            Circle c1 = new Circle(9);
            Circle c2 = new Circle(32.32);
            Console.WriteLine("data of c1");
            c1.printInfo();
            Console.WriteLine("data of c2");
            c2.printInfo();
            //Console.ReadLine();
        }
    }
}
错误是


这是创建第二个实例c2的地方
说明中说“无法从双精度转换为浮点”。我不明白,我的参数是32.32,我相信它是一个浮点。

你给它传递了一个
双精度
,它想要一个
浮点。您需要将数字输入为
32.32f
,以使其有效,否则十进制数字将假定为
double

当您编写十进制文字(例如
32.32
)时,编译器会自动假定它为double

您需要明确地说它是一个float,如下所示:

32.32f


请注意,您的另一行传递整数文本
9
,它可以隐式转换为
float
double
不会隐式转换为任何内容,请参阅),因此它会编译。

要将值定义为float,您需要在其后面加上
f
-请参阅本文

在您的情况下,您希望使用:

Circle c2 = new Circle(32.32f);

使用
32.32f
。如果没有
f
(或
f
),它将被解释为
双重
。为了将来的参考,这个标题实际上没有说明。比如“为什么32.32是双精度的,而不是浮动的?”会更好。(编辑以修复,请在将来编写更好的标题)。
Circle c2 = new Circle(32.32f);