我需要指定在小数点后3位我需要两个数字相同:1.2345和1.2348是正确的。但是1.2345和1.2388是不正确的。我需要让用户指定应该编程检查的位数。
我在想这样的事情:
do {
x = f(i++);// will count some number with i iterations
x_next = f(i++);// will count some number with i+1 iterations
} while (fabs(x - x_next) > accuracy);// there should be some difference, cause more iterations = accurate number, but different numbers = different iterations needed
但我不知道如何将3号转换为0.001。
你能告诉我一件事吗?
答案 0 :(得分:1)
将1.0除以10 3次得到0.001。
答案 1 :(得分:1)
要将3转换为.001,请使用pow()函数。 .001 = pow(10,-3)(它返回指数幂的基数,在本例中为10 ^ -3。)你需要包含math.h库来使用pow()。
谨慎一点。 abs(x-y)< .001并不保证他们同意3位小数。例如,1.00000和.99999不同意任何小数位,但abs(1.00000-.99999)=。00001< 0.001
答案 2 :(得分:1)
如果你需要检查两个数字在第3个小数位上是否相同,你可以简单地将这两个数值乘以1000并将它们作为整数进行比较。
你得到的图片,你必须使用10 ^ decimal_place。
编辑: 如果需要舍入,则在乘法之前简单地添加5/10 ^(decimal_place + 1)。
答案 3 :(得分:1)
嗯,有两种方法可以解决这个问题:
如果您想查看两个数字的差异是否小于10减去数字的幂(在您的示例0.001
中),您可以使用提供的解决方案。但是,它说1.3458
等于1.3462
,这看起来并不像你想要的那样。
您可以将数字转换为整数。在你的例子中(3个小数位),你可以将你的数字乘以1000
(10到3的幂),得到它的整数部分(用(int)
强制转换),如在:
int multiplier = pow(10,decimalPlaces);
int number1 = (int) numberOriginal1*multiplier;
int number2 = (int) numberOriginal2*multiplier;
if(number1 == number2)
printf("Success\n");
else printf("Fail\n");
希望有所帮助。
答案 4 :(得分:-1)
如果您只想将其作为输出,只需使用printf("%.3f",number)
或者如果你想以其他方式,只需通过这个问题, Rounding Number to 2 Decimal Places in C