[英]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.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.