c#:while while循环不起作用

时间:2017-07-13 08:12:16

标签: c# windows do-while

这个程序应该适用于这个条件,至少我认为,但对于某些值,它不能按预期工作。

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,其工作正常 -

working for 1034.347

但价值1034.235 not working 1034.235 它会变得无限

2 个答案:

答案 0 :(得分:9)

C# - 为了跟上Joneses - 有一个浮点模数运算符 %

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

您的案例中的解决方法是使用1000个值的因子,并使用适当的整数类型。

参考:Is floating point math broken?

答案 1 :(得分:0)

将浮点数与相等值进行比较非常危险,因为浮点运算有错误。例如。数字不为零,它是0.0 [..] 01 - 或:接近零。我建议与“带宽”进行比较:

abs(nubmer) < 0.000001.