编写if语句以标识float变量是否将值保留在小数点后。

示例代码:

AAA = 123.456

if( AAA has value behind decimal = true)

{

        printf("true")

}

// ...or user input changes value of AAA...

AAA = 123.000


if( AAA has value behind decimal = true)

{

        printf("false")

}


有什么帮助吗?

最佳答案

#include <stdio.h>
#include <math.h>

int main(void)
{
    double param, fractpart, intpart;

    param = 123.456;
    fractpart = modf(param , &intpart);
    if (fractpart != 0.0) {
        printf("true\n");
    } else {
        printf("false\n");
    }
    return 0;
}


请注意,由于舍入误差和截断,在计算过程中会出现数值误差,例如:

0.11 - (0.07 + 0.04) != 0.0


您可以控制这些舍入误差(根据您的比例调整EPSILON值):

#include <stdio.h>
#include <math.h>

#define EPSILON 0.00000000001

int almost_zero(double x)
{
    return fabs(x) < EPSILON;
}

int main(void)
{

    double param, fractpart, intpart;

    param = 0.11 - (0.07 + 0.04);
    fractpart = modf(param , &intpart);
    if (!almost_zero(fractpart)) {
        printf("true\n");
    } else {
        printf("false\n");
    }
    return 0;
}

关于c - 小数点后浮点值后面的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26114949/

10-11 17:55