如何检查C中指定小数位的精度

时间:2014-11-18 18:35:33

标签: c floating-accuracy

我需要指定在小数点后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。

你能告诉我一件事吗?

5 个答案:

答案 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