永发信息网

C++将小数(double)转化为分数(Rational)

答案:2  悬赏:50  手机版
解决时间 2021-07-26 03:11
  • 提问者网友:末路
  • 2021-07-25 09:52

在C++中如何实现将小数转化为分数?

我的想法是将小数的每一个数字转化为字符,再计算字符串的长度,但不知道如何做

最佳答案
  • 五星知识达人网友:往事隔山水
  • 2021-07-25 11:01
相信编码你应该没问题
就提供给你一个我的思路吧
3.134
转换成字符串
无非分两段
整数部分 分数部分
整数部分先用int强制转换获取
然后除10直到0为止获取每位数
至于小数部分
可以每次乘10 然后取整数部分记录
再判断小数部分是否为0 循环来找
原值减去整数部分就是小数部分
小数部分
全部回答
  • 1楼网友:刀戟声无边
  • 2021-07-25 12:25

C++中double类型的“长度”(位数)是很长的,就算像1.0/2=0.5也会存成0.50000...具体是多长跟编译器有关。一般来说,先确定了小数位数才能转成分数。比如说约定出现连续的若干个0的时候就舍弃这些0以及之后的部分(有限小数),或者找到循环节再用数学方法(求极限)推出这个分数,至于那些没有上面两种特征的小数显然是无理数或者存的位数不够,无法化成分数

把一个数的小数部分转成字符很容易

s=(int)x;

x=x-s;

i=0;

while(i<n) //要保存n位

{

x=x*10;

a[i]=((int)x)%10;

i++;

}

这样程序结束后a[i]就保存了x的n位小数,当然n不能定的太大,超过int32(有对x取整的操作)

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯