为什么32.32是双倍的,而不是浮动?

时间:2014-05-30 18:59:40

标签: c#

这是我的C#代码,它会生成 Circle 类型的两个实例( 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;
        }
        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();
        }
    }
}

错误为enter image description here

这是创建第二个实例 c2 的地方。
描述说'无法从double转换为float '。我无法理解,我的参数是32.32,我相信它是一个浮点数。

5 个答案:

答案 0 :(得分:9)

当您编写十进制文字(例如32.32)时,编译器会自动将其视为double。

你需要明确地说它是一个浮点数,如下所示:

32.32f

或者

(float)32.32

请注意,您的其他行传递整数文字9,其中 可隐式转换为floatdouble不会隐式转换为任何内容,请参阅{ {3}})所以它编译。<​​/ p>

答案 1 :(得分:4)

您传递的是double,它需要float。您需要输入数字32.32f才能使其有效,否则它会假定double表示十进制数。

答案 2 :(得分:1)

要将值定义为浮点数,您需要使用f对其进行后缀 - 请参阅此MSDN文章。

在您的情况下,您想要使用:

Circle c2 = new Circle(32.32f);

答案 3 :(得分:0)

创建实例时,您需要将参数强制转换为Circle构造函数:

Circle c2 = new Circle((float) 32.32);

另一种选择是在类本身中添加一些类型检查。

最佳选项可能是接受构造函数的double参数。 float将隐式转换为double而不会丢失数据。

答案 4 :(得分:-1)

您必须在32.32之后添加f或F后缀。它将是浮动的。

Circle c2 = new Circle(32.32f);

Float类型具有7位精度(双15)并占用4个字节的内存。 Double更大,占用8个字节。