繁体   English   中英

C#:做while循环不能正常工作

[英]c# : do while loop not working as supossed

我认为该程序应该同时适用于条件和条件,但对于某些值,它并不能按预期工作。

static void Main(string[] args)
{
    double num, temp = 0;
    double frac;
    int j = 1;

    num = 1034.264;            
    do
    {
        j = j * 10;
        Console.WriteLine(j);
        temp = num * j;
        Console.WriteLine(temp);
    }
    while ((temp % 10)!=0);
}

对于值1034.347,其工作正常-

为1034.347工作

但是对于值1034.235 无法正常工作1034.235它将变为无限

为了跟上Joneses的步伐,C#具有一个浮点模运算符 %

当以十进制数表示时,结果二进制浮点值不太可能将其所有尾随数字都设置为零,因此(temp % 10)!=0)false的情况很少。

在您的情况下,一种变通方法是使用值的1000倍,并使用适当的整数类型。

参考: 浮点数学运算是否损坏?

将浮点数与相等进行比较非常危险,因为浮点运算会出错。 例如,数字不为零,则为0.0 [..] 01-或:接近零。 我建议将其与“ bandwith”进行比较:

abs(nubmer) < 0.000001.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM