разбить поплавок на дроби и интегралы, используя C - PullRequest
0 голосов
/ 03 мая 2020
int decimalSplit(float f)
{   
    char s_value[60], s_integral[60], s_fractional[60];
    int i, found = 0, count = 1, integral, fractional;

    sprintf(s_value, "%f", f);

    for (i = 0; s_value[i] != '\0'; i++)
    {
        if (!found)
        {
            if (s_value[i] == '.')
            {
                found = 1;
                s_integral[i] = '\0';
                continue;
            }
            s_integral[i] = s_value[i];
            count++;
        }
        else
        s_fractional[i - count] = s_value[i];
    }
    s_fractional[i - count] = '\0';

    integral = atoi(s_integral);
    fractional = atoi(s_fractional);

    return integral;
}

Здравствуйте, я пытаюсь создать программу, которая разбивает число с плавающей запятой на целую часть (как int) и дробную часть (как int). Для меня также было бы обновление QoL, если программа хранит их в массиве и возвращает этот массив. (В примере кода реализация возвращает только одно целое число.) Например, 682.1 должно возвращать 682 и 1. (в массиве желательно) хочу чтобы моя программа нашла "." в данном аргументе создайте новое целое число из интегралов и сделайте другое целое число из дробей.

В онлайн-среде IDE мой код работает, однако в моем решении atmel я получаю "конфликтующие типы для ошибки" Decimalsplit ". хотел бы услышать от вас о том, где проблема.

1 Ответ

2 голосов
/ 03 мая 2020

программа [...] возвращает массив [...]

сильно отредактированную цитату

Вы можете заключить массив в struct

#include <stdio.h>

struct Arr2 { int data[2]; };

struct Arr2 foo(double x) {
    struct Arr2 r;
    r.data[0] = x;
    r.data[1] = (x - r.data[0]) * 1000000;
    return r;
}

int main(void) {
    struct Arr2 split;
    split = foo(3.14159);
    printf("%d + 0.%06d\n", split.data[0], split.data[1]);
    return 0;
}

https://ideone.com/NmTvxn

...