如何使双打正常工作?c#

如何使双打正常工作?c#,c#,double,C#,Double,代码如下: static void Main(string[] args) { int xd2 = 5; for (double xd = (double)xd2; xd <= 6; xd += 0.01) { Console.WriteLine(xd); } } static void Main(字符串[]args) { int xd2=5; 对于(double xd

代码如下:

    static void Main(string[] args)
    { 
        int xd2 = 5;

        for (double xd = (double)xd2; xd <= 6; xd += 0.01)
        {
            Console.WriteLine(xd);
        }

    }
static void Main(字符串[]args)
{ 
int xd2=5;
对于(double xd=(double)xd2;xd如果希望保持这种精度,请使用

浮点类型不能准确地表示某些值。我建议阅读以获得全面的解释

decimal xd2 = 5m;

for (decimal xd = xd2; xd <= 6m; xd += 0.01m)
{
    Console.WriteLine(xd);
}
十进制xd2=5m;

对于(decimal xd=xd2;xdNo)。这就是双倍运算的方式……尝试使用decimal代替

 int xd2 = 5;

 for (decimal xd = (decimal)xd2; xd <= 6; xd += 0.01M)
 {
     Console.WriteLine(xd);
 }
intxd2=5;

对于(decimal xd=(decimal)xd2;xd如果可能,您应该始终使用绝对计算而不是迭代计算来消除这些舍入误差:

public static void Main(string[] args)
{
    int xd2 = 5;

    for (int i = 0; i < 100; ++i) {
        Console.WriteLine(xd2 + i * 0.01);
    }
}
publicstaticvoidmain(字符串[]args)
{
int xd2=5;
对于(int i=0;i<100;++i){
控制台写入线(xd2+i*0.01);
}
}

这是因为double是浮点指针,并且该算法不精确。 您可以改为使用十进制,如下所示:

 static void Main(string[] args)
    {
        int xd2 = 5;

        for (decimal xd = (decimal)xd2; xd <= 6; xd += 0.01M)
        {
            Console.WriteLine(xd);
        }
        Console.ReadLine();
    }
static void Main(字符串[]args)
{
int xd2=5;

对于(decimal xd=(decimal)xd2;xd double在C#-)中确实可以正常工作,那么为什么还要将int转换为double呢?请尝试使用不同的步骤,例如,
0.125
。一旦意识到原因,您将学到一些非常有启发性的东西:)Jon Skeet就这一主题发表了一系列文章:,
decimal
也是一种浮点类型;只是以10为基数而不是以2为基数表示。值得注意的是,
decimal
从根本上讲并不比
double
更“精确”(除了它可以处理的位数更多).它只是以10为基数存储,因此数字以熟悉的小数点符号表示(如您的示例中所示)可以准确地表示,而在base-2
float
double
类型中,它们不能准确地表示。
float
double
可以准确地存储以二进制点表示法表示的数字;这不是很有用,因为没有人使用这种表示法。
 static void Main(string[] args)
    {
        int xd2 = 5;

        for (decimal xd = (decimal)xd2; xd <= 6; xd += 0.01M)
        {
            Console.WriteLine(xd);
        }
        Console.ReadLine();
    }