这个程序应该适用于这个条件,至少我认为,但对于某些值,它不能按预期工作。
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 not working 1034.235 它会变得无限
答案 0 :(得分:9)
C# - 为了跟上Joneses - 有一个浮点模数运算符 %
。
当表示为十进制数时,结果二进制浮点值不太可能将其所有尾随数字设置为零,因此(temp % 10)!=0)
为false
是罕见的。
您的案例中的解决方法是使用1000个值的因子,并使用适当的整数类型。
答案 1 :(得分:0)
将浮点数与相等值进行比较非常危险,因为浮点运算有错误。例如。数字不为零,它是0.0 [..] 01 - 或:接近零。我建议与“带宽”进行比较:
abs(nubmer) < 0.000001.