Как узнать, проверять на C языке, если в числах с плавающей запятой содержатся значения, отличные от 0 - PullRequest
0 голосов
/ 11 марта 2020

На языке C я хочу проверить, имеет ли мой float какое-либо десятичное значение, отличное от 0, тогда я хочу применить условие if, у меня есть формула с двумя способами, я хочу, чтобы эта программа была go со способом 1, если число с плавающей запятой содержит некоторые значения, отличные от 0, и go способом 2, если он имеет только 0 с десятичным знаком. Вот мой текущий код:

#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
#include <math.h>

int letter;
int word;
int sentence;

int main(void) {

    // prompt the user with the question
    string article = get_string("TEXT: ");

    // set the length of article
    int n = strlen(article);

    // add +1 if the article starts with alphanumeric letter
    if (isalnum(article[0])) {
        word = 1;
    }

    // count words
    for (int i = 0; i < n;  i++) {
        // count letters
        if (isalnum(article[i])) {
            letter++;
        }

        // count for words
        if (i < n - 1 && isspace(article[i]) && isalnum(article[i + 1])) {
            word++;
        }

        // count for sentences
        if (i > 0 && (article[i] == '!' || article[i] == '?' || article[i] == '.') && isalnum(article[i - 1])) {
            sentence++;
        }
    }

    // Formula Coleman's calculations:
    float L = letter / word;
    float S = sentence / word;

    //THIS IS WHERE I NEED HELP
    if (#it have some value other then "0") {
        float grade1 = 0.0588 * (100 * L) - 0.296 * (100 * S) - 15.8;
    } else
    if (# it does have only 0s in decimals) {

        float grade1 = 0.0588 * (100 * letter/word) - 0.296 * (100 * sentence/word) - 15.8;
    }

    grade1 = round(grade1);
    grade1 = truncl(grade1);
    int grade = grade1;

    // print result
    if (grade <= 1) {
        printf("Before Grade 1\n");
    } else
    if (grade < 16) {
        printf("Grade %i\n", grade);
    } else {
        printf("Grade 16+\n");
    }
}

1 Ответ

0 голосов
/ 11 марта 2020

Требуется функция modff(), которая разбивает число с плавающей запятой на его составные и компоненты с плавающей запятой.

float ipart, fpart;
fpart = modff(num, &ipart);
if (fabsf(fpart) < 0.00001f) { // Or whatever precision you need
 // stuff
}

Из-за способа математика с плавающей точкой работает , вы не хотите сравнивать напрямую с 0. Дополнительная информация .

...