我是一个初学者。我刚刚在SharpDevelop上创建了一个小的C#程序,它只计算前几个整数的平方根。这是:
public static void Main(string[] args)
{
int i;
XXXXX[] t = new XXXXX[40];
for(i=0; i<t.Length; i++)
{
t[i]=Math.Sqrt(i);
}
for(i=0; i<t.Length; i++)
{
Console.WriteLine(""+t[i]);
}
Console.ReadKey(true);
}
我的问题是:
为什么我的程序在我写“double”而不是“XXXXX”时工作但在我写“float”而不是“XXXXX”时不起作用?
我以为我听到老师说浮动和双重是相似的,除了双精度更高。所以我不明白为什么我不能使用float而不是double ...
答案 0 :(得分:6)
Math.Sqrt()
返回double
,因此当您尝试将其分配给float
时,会出现编译错误。这是因为float
的精确度低于double
,因此您可能会丢失详细信息。
您可以明确转换数字:
t[i]=(float)Math.Sqrt(i);
答案 1 :(得分:2)
答案 2 :(得分:1)
您必须将Math.Sqrt(i)
显式的结果转换为浮点数:
t[i] = (float)Math.Sqrt(i);
答案 3 :(得分:0)
将浮动视为小盒子(实际上是一定量的内存),然后将双倍视为一个大盒子(也就是一定量的内存)。现在考虑Math.Sqrt给你(返回)一个大的东西(实际上是一个数字)放在一个盒子里。如果你使用双(大盒子),你给的东西很适合。如果你使用浮子(小盒子),那么东西就不适合你,你需要切掉一些东西(失去精确度),把它挤在盒子里!