为什么我不能在SharpDevelop的这个小型C#程序中使用“float”而不是“double”?

时间:2014-10-21 08:58:23

标签: c# c#-4.0 sharpdevelop

我是一个初学者。我刚刚在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 ...

4 个答案:

答案 0 :(得分:6)

Math.Sqrt()返回double,因此当您尝试将其分配给float时,会出现编译错误。这是因为float的精确度低于double,因此您可能会丢失详细信息。

请参阅floatdouble的文档。

您可以明确转换数字:

t[i]=(float)Math.Sqrt(i);

答案 1 :(得分:2)

只是因为Math.Sqrt返回了一个双倍。

如果需要,可以投放到float(但确实会失去精确度):

t[i]=(float)Math.Sqrt(i);

答案 2 :(得分:1)

您必须将Math.Sqrt(i)显式的结果转换为浮点数:

t[i] = (float)Math.Sqrt(i);

答案 3 :(得分:0)

将浮动视为小盒子(实际上是一定量的内存),然后将双倍视为一个大盒子(也就是一定量的内存)。现在考虑Math.Sqrt给你(返回)一个大的东西(实际上是一个数字)放在一个盒子里。如果你使用双(大盒子),你给的东西很适合。如果你使用浮子(小盒子),那么东西就不适合你,你需要切掉一些东西(失去精确度),把它挤在盒子里!