【问题标题】:splitting a float into fractions and integrals using C使用 C 将浮点数拆分为分数和积分
【发布时间】:2020-05-02 23:58:32
【问题描述】:
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”错误的“冲突类型”。我想听听您的意见。

【问题讨论】:

  • 你想要682.01 给什么?同682.1?
  • 我希望我的代码给出 682 和 01。
  • 但是作为一个整数,011 是一样的。您确定要将小数部分表示为整数吗?
  • 总是(是的,总是)比float更喜欢double
  • 2.99999999999420125 呢?

标签: c floating-point


【解决方案1】:

程序 [...] 返回 [...] 数组

引用大量编辑

您可以将数组包装在结构中

#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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2015-09-09
    • 2020-05-18
    • 2016-07-20
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多