如何将浮点数转化为整数比
如题,假设有一个浮点数 8.52,我将如何求出 213/25 这样一组数据?(得出 2398166801574789/281474976710656 之类的也可以)求大佬帮助{:10_297:} 如果是 Python,可以直接用 fractions 模块
但 C 就不知道了{:10_245:} 先变成852/100,在约分{:10_257:} zltzlt 发表于 2020-5-8 14:49
如果是 Python,可以直接用 fractions 模块
但 C 就不知道了
Python我就直接 float.as_integer_ratio 了,但是我看不懂这个的源码……{:10_277:} KevinHu 发表于 2020-5-8 14:49
先变成852/100,在约分
会溢出,而且不好变{:10_243:} 永恒的蓝色梦想 发表于 2020-5-8 14:51
Python我就直接 float.as_integer_ratio 了,但是我看不懂这个的源码……
{:10_277:} 自己约分啊8.52=852/100然后慢慢约分 现成的库函数估计是没有 wp231957 发表于 2020-5-8 15:23
自己约分啊8.52=852/100然后慢慢约分 现成的库函数估计是没有
把 8.52 转 852/100 这个过程,8.5222222222222222222222 可能直接溢出了 永恒的蓝色梦想 发表于 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:36
对于这个问题好办,可以转成字符串
之后我再研究研究,^_^
有道理{:10_258:} 永恒的蓝色梦想 发表于 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]