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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++将小数(double)转化为分数(Rational)相关的知识,希望对你有一定的参考价值。

在C++中如何实现将小数转化为分数?我的想法是将小数的每一个数字转化为字符,再计算字符串的长度,但不知道如何做

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取整的操作) 参考技术A 相信编码你应该没问题
就提供给你一个我的思路吧
3.134
转换成字符串
无非分两段
整数部分 分数部分
整数部分先用int强制转换获取
然后除10直到0为止获取每位数
至于小数部分
可以每次乘10 然后取整数部分记录
再判断小数部分是否为0 循环来找
原值减去整数部分就是小数部分
小数部分

小数和百分数相互转化

function toPercent(point,num){
    
            if (point==0) {
                return 0;
            }
      
            var str=Number(point*100).toFixed(num);
            str+="%";
            return str;
   }
    

//point  接收的数据
//num   保留小数位

toFixed() 方法

可把 Number 四舍五入为指定小数位数的数字。

NumberObject.toFixed(num)

num:必需。规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替。

 

传说中这个方法有什么银行家算法,并不是四舍五入,我们可以对这个方法重写

银行家舍入法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。

Number.prototype.toFixed = function (s) {
        var times = Math.pow(10, s);
        var des = this * times + 0.5;
        des = parseInt(des, 10) / times;
        return des + ‘‘;
};

定义全局方法对负数进行处理

 // num表示需要四舍五入的小数
 // s表示需要保留几位小数
    function toFixed(num, s) {
        var times = Math.pow(10, s);
        if (num < 0) {
            num = Math.abs(num);//先把负数转为正数,然后四舍五入之后再转为负数
            var des = parseInt((num * times + 0.5), 10) / times;
            return -des;
        } else {
            var des = parseInt((num * times + 0.5), 10) / times;
            return des;
        }
    }
    console.log(toFixed(0.335, 2));//0.34
    console.log(toFixed(-0.335, 2));//-0.34
    console.log(toFixed(-1.5, 0));//-2

 

 

百分数转小数

var percent = "4.2%";
        function toPoint(percent){
                var str=percent.replace("%","");
                    str= str/100;
                return str;
        }
        var result = toPoint(percent); //0.042

 

 

 

 

 

以上是关于C++将小数(double)转化为分数(Rational)的主要内容,如果未能解决你的问题,请参考以下文章

将double小数转化成百分数字符串

python 将小数转化为百分数

小数怎么转化分数?

小数转化为分数

如何避免 Gson 将 JsonString 中的 int long 等数字转化为带小数的 Double

python中如何计算百分数