这是我的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();
}
}
}
错误为
这是创建第二个实例 c2 的地方。
描述说'无法从double转换为float '。我无法理解,我的参数是32.32,我相信它是一个浮点数。
答案 0 :(得分:9)
当您编写十进制文字(例如32.32
)时,编译器会自动将其视为double。
你需要明确地说它是一个浮点数,如下所示:
32.32f
或者
(float)32.32
请注意,您的其他行传递整数文字9
,其中 可隐式转换为float
(double
不会隐式转换为任何内容,请参阅{ {3}})所以它编译。</ p>
答案 1 :(得分:4)
您传递的是double
,它需要float
。您需要输入数字32.32f
才能使其有效,否则它会假定double
表示十进制数。
答案 2 :(得分:1)
答案 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个字节。