仅比较c中的第一个小数点

时间:2019-02-01 08:50:23

标签: c

我正在寻找一种比较十进制值的第一个小数点的方法。 (-1.064728) 在我的项目中,我需要知道此十进制是否为0,但是我不知道该怎么做。 有人可以帮我吗。

3 个答案:

答案 0 :(得分:3)

这是初学者解决此问题的最简单方法。 我的解决方案使用模运算符,该运算符可在除法运算后计算提醒。

因此,您将数字乘以10,这意味着您将小数点向右推一位。这意味着您得到-10.64728。之后,将数字显式转换为整数,这将除去数字的小数部分,您将得到-10。

然后,您使用模运算符将给定数字除以10,并返回除法的余数,在这种情况下为0

#include <stdio.h>

int main()
{
    float con = -1.064728;

    // This will put first decimal as last digit and remove all decimals
    int res = (int) (con * 10); 

    // Take last digit of integer
    res = res % 10; 

    if (res == 0) {
        printf("Result is zero");
    } else {
        printf("Result is %d", res);
    }

    return 0;
}

对于大于(2 ^ 31-1)/ 10的数字

此外,如果您需要使用大于整数最大范围十分之一的数字,我建议以字符串形式使用数字。这是最简单的解决方案。

#include <stdio.h>

int main()
{
    char* c = "-1151651651651651781651.064728";

    char result = '\0';

    int i = 0;
    // Check char on position `i`
    while(c[i] != 0) {
        // Check if current number is decimal delimiter
        // Also check if next char is not end of string

        if (c[i] == '.' && c[i+1] != 0) {
            // Write next character as result and exit loop

            result = c[i+1];
            break;
        }

        // Increase iterator
        i++;
    }

    if (result == '0') {
        printf("Result is zero");
    } else {
        printf("Result is %c", result);
    }

    return 0;
}

如果您真的想在第二种情况下优化代码,我建议您删除迭代器整数并尝试滥用指针。

答案 1 :(得分:1)

double fraction = number - trunc(number);
int digit = 10 * fraction;
if (digit) { ... }
else { ... }

答案 2 :(得分:0)

float whole = floor(n);
float dec = n - whole;
if( dec == 0 ) { /*if decimal is zero*/}
else { /*if decimal is not zero*/}