将失去精度的小数转化为分数的java实现
来源:互联网 发布:财经新闻读者阅读数据 编辑:程序博客网 时间:2024/05/06 18:41
对于无限循环与无限不循环的小数转化为分数(也就是无精度损失的小数),以下有相关博文,大家可以去参考
http://www.zizhujy.com/blog/post/2014/01/21/将小数转化为分数的算法.aspx
而我下面的这个小程序面对的是失去精度的小数如何转化为分数
啥也别说了,先上源码
package cn.qunye.math;import org.junit.Test;public class MyMath2{@Testpublic void test() throws Exception{//测试方法String back = Util2.getFractions(0.2084);//测试的数据System.out.println("result--->"+back);}}class Util2{public static String getFractions(double decimals){int[] back; int lastArr[] = {(int)decimals,1};int nextArr[] = {(int)decimals+1,1};while(!(Math.abs((double)lastArr[0]/lastArr[1] - decimals) < 0.0001
|| Math.abs((double)nextArr[0]/nextArr[1] - decimals) < 0.0001)){back = test(lastArr,nextArr,decimals);if(back[1] != 0){return back[0]+"/"+back[1];}}return "没有找到合适的分数";}public static int[] test(int lastArr[],int nextArr[],double decimals){int terrorist = lastArr[0]*2+1;int denominator = lastArr[1]*2;if((double)terrorist/denominator > decimals){nextArr[0] = terrorist;nextArr[1] = denominator;lastArr[0]*=2;lastArr[1]*=2;}else{lastArr[0] = terrorist;lastArr[1] = denominator;nextArr[0]*=2;nextArr[1]*=2;}//进入第二步测试System.out.println("==========="+lastArr[0]+"/"+lastArr[1]+"-->"+nextArr[0]+"/"+nextArr[1]+"==========");int leftTerrorist = lastArr[0];int leftDenominator = nextArr[0];int rightDenominator = nextArr[1];int left;while((double)leftDenominator/(rightDenominator) > decimals){rightDenominator*=2;}left = rightDenominator/2;int[] back = {0,0};for(int i=leftTerrorist;i<leftDenominator*2;i++){back = test2(i,left,rightDenominator,decimals);if(back[1] != 0)return back;}return back;}public static int[] test2(int terrorist,int left,int right,double decimals){int []back = {0,0};while(right - left > 1){int middle = (left + right)/2;if(Math.abs((double)terrorist/middle - decimals) < 0.0001){back[0] = terrorist;back[1] = middle;return back;}if((double)terrorist/middle > decimals){left = middle;}elseright = middle;}return back;}}
其实实现起来总的并不是很困难,主要用到了二分法的一个思想,如果大家有更好的做法可以交流
0 0
- 将失去精度的小数转化为分数的java实现
- 小数转化为分数
- 分数转化为小数
- 分数转化为小数
- 十进制的分数转化为七进制的小数
- VB实现小数和分数的相互转化
- 将分数表示为任意进制的小数
- 将数字转化成一定精度的小数(JS函数)
- 将PPT转化为PDF我的JAVA代码实现!
- JAVA实现将GeoHash转化为对应的经纬度坐标
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- [C++]小数转化为分数(class)
- DecimalFormat 快速将小数转化为保留任意小数位数的String
- 将十进制小数转化为二进制小数
- hdu 1717 && 计蒜课 52 【分数小数的互相转化】【数论?】
- 分数的精度
- 输入分数,然后把分数转化为相应的等级
- Android把res/raw的资源转化为Uri形式访问(android.resource://)
- 20岁女大学生开网店年赚100万,自曝曾shua销量
- 修复Nginx报错:upstream sent too big header while reading response header from upstream
- Android控件EditText不自动获取焦点
- CocoaPods安装问题解决
- 将失去精度的小数转化为分数的java实现
- spring的基本概念
- UE3 iPhonePackager 工具
- 微信企业号,发消息或获取人员信息时报no privilege to access/modify contact/party/agent
- 系统函数FixesUpdate,Update和Awake,Start注意点
- Kinetis FTM PWM波 脉冲个数控制
- 软件工艺师:专业、务实、自豪——互动出版网
- java对Memcached的基本操作
- Linux系统文件权限