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

Pat*_*ryk 2 c# double

这是代码:

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

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

    }
Run Code Online (Sandbox Code Playgroud)

这是输出: 在此输入图像描述

我想继续添加0.01(正如你在屏幕上看到的,有时恰好添加0.99999)谢谢

Ode*_*ded 14

使用decimal,如果你想保持这种精度.

浮点类型无法准确表示某些值.我建议阅读每个计算机科学家应该知道的关于浮点运算的内容,以获得全面的解释.

decimal xd2 = 5m;

for (decimal xd = xd2; xd <= 6m; xd += 0.01m)
{
    Console.WriteLine(xd);
}
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,`decimal`基本上不比"double"更"精确"(除了它拥有的更多位数).它只是存储在基数10中,所以用熟悉的小数点表示法表示的数字(如你的例子中)*可以*精确表达,而在base-2`float`和`double`类型中,它们不能.`float`和`double`可以准确存储以二进制点表示法表示的数字; 这不是很有用,因为没有人使用这种表示法. (5认同)

Kei*_*las 5

不,这就是双打工作的方式....尝试使用十进制代替

 int xd2 = 5;

 for (decimal xd = (decimal)xd2; xd <= 6; xd += 0.01M)
 {
     Console.WriteLine(xd);
 }
Run Code Online (Sandbox Code Playgroud)

如果你想坚持双打,但只关心小数点后两位使用......

int xd2 = 5;

for (double xd = (double)xd2; xd <= 6; xd += 0.01)
{
   Console.WriteLine(Math.Round(xd,2));
}
Run Code Online (Sandbox Code Playgroud)