永恒的蓝色梦想 发表于 2020-5-8 14:47:31

如何将浮点数转化为整数比

如题,假设有一个浮点数 8.52,我将如何求出 213/25 这样一组数据?(得出 2398166801574789/281474976710656 之类的也可以)
求大佬帮助{:10_297:}

zltzlt 发表于 2020-5-8 14:49:39

如果是 Python,可以直接用 fractions 模块

但 C 就不知道了{:10_245:}

KevinHu 发表于 2020-5-8 14:49:47

先变成852/100,在约分{:10_257:}

永恒的蓝色梦想 发表于 2020-5-8 14:51:16

zltzlt 发表于 2020-5-8 14:49
如果是 Python,可以直接用 fractions 模块

但 C 就不知道了

Python我就直接 float.as_integer_ratio 了,但是我看不懂这个的源码……{:10_277:}

永恒的蓝色梦想 发表于 2020-5-8 14:51:55

KevinHu 发表于 2020-5-8 14:49
先变成852/100,在约分

会溢出,而且不好变{:10_243:}

zltzlt 发表于 2020-5-8 15:07:32

永恒的蓝色梦想 发表于 2020-5-8 14:51
Python我就直接 float.as_integer_ratio 了,但是我看不懂这个的源码……

{:10_277:}

wp231957 发表于 2020-5-8 15:23:24

自己约分啊8.52=852/100然后慢慢约分   现成的库函数估计是没有

永恒的蓝色梦想 发表于 2020-5-8 15:28:46

wp231957 发表于 2020-5-8 15:23
自己约分啊8.52=852/100然后慢慢约分   现成的库函数估计是没有

把 8.52 转 852/100 这个过程,8.5222222222222222222222 可能直接溢出了

人造人 发表于 2020-5-8 15:36:21

永恒的蓝色梦想 发表于 2020-5-8 15:28
把 8.52 转 852/100 这个过程,8.5222222222222222222222 可能直接溢出了

对于这个问题好办,可以转成字符串
之后我再研究研究,^_^

#include <stdio.h>

int main(void) {
    double x = 8.52;
    char buf;
    sprintf(buf, "%lf", x);
    printf("%s\n", buf);
    return 0;
}

永恒的蓝色梦想 发表于 2020-5-8 15:37:46

人造人 发表于 2020-5-8 15:36
对于这个问题好办,可以转成字符串
之后我再研究研究,^_^

有道理{:10_258:}

人造人 发表于 2020-5-8 16:01:02

永恒的蓝色梦想 发表于 2020-5-8 15:37
有道理

这个问题挺有意思的,^_^

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

typedef struct {
    int a, b;
} ratio_t;

ratio_t get_ratio(double num) {
    char buf;
    snprintf(buf, 1024, "%lf", num);

    int len = strlen(buf);
    for(int i = len - 1; i >= 0; --i) {
      if(buf != '0') {
            buf = '\0';
            len = i + 1;
            break;
      }
    }

    char *p = strchr(buf, '.');
    int n = buf + len - (p + 1);
    ratio_t ret;
    ret.a = num * pow(10, n);
    ret.b = pow(10, n);
    return ret;
}

int main(void) {
    ratio_t ratio = get_ratio(8.52);
    printf("8.52 -> %d,%d\n", ratio.a, ratio.b);
    ratio = get_ratio(8);
    printf("8 -> %d,%d\n", ratio.a, ratio.b);
    return 0;
}
页: [1]
查看完整版本: 如何将浮点数转化为整数比