java怎么把小数转为分母为一位数的分数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么把小数转为分母为一位数的分数相关的知识,希望对你有一定的参考价值。
设置循环i,从1到9。把小数乘以i再减去它的取整数部分,如果等于零,输出分母。记录减去的整数部分为分子。 参考技术A import java.math.BigDecimal;import java.util.*;
public class Test1
public static void main(String[] args)
Double d = 0.6379;
//0.6379 0.8079
Integer len = d.toString().split("\\.")[1].length();
List<Double> list = new ArrayList<Double>();
Map<String, Double> map = new HashMap<String, Double>();
for (int i = 2; i < 10; i++)
for (int j = 1; j < i; j++)
BigDecimal b1 = new BigDecimal(Double.toString(j));
BigDecimal b2 = new BigDecimal(Double.toString(i));
Double rslt = b1.divide(b2, len+1, BigDecimal.ROUND_HALF_UP).doubleValue();
Double result = Math.abs(sub(rslt, d));
list.add(result);
Collections.sort(list);
map.put(j + "/" + i, result);
Double zx1 = list.get(0);
Double zx2 = list.get(1);
List<String> fsList = new ArrayList<String>();
if(Double.doubleToLongBits(zx1) == Double.doubleToLongBits(zx2))
for (String key : map.keySet())
String value = map.get(key).toString();
if (value.equals(zx1.toString()))
int i = get_gcd(Integer.parseInt(key.split("/")[0]),Integer.parseInt(key.split("/")[1]));
if(i==1)
fsList.add(key);
else
for (String key : map.keySet())
String value = map.get(key).toString();
if (value.equals(zx1.toString()))
int i = get_gcd(Integer.parseInt(key.split("/")[0]),Integer.parseInt(key.split("/")[1]));
if(i==1)
fsList.add(key);
if (value.equals(zx2.toString()))
int i = get_gcd(Integer.parseInt(key.split("/")[0]),Integer.parseInt(key.split("/")[1]));
if(i==1)
fsList.add(key);
Collections.sort(fsList);
System.out.println(fsList);
System.out.println(fsList.get(0));
public static double sub(double v1, double v2)
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
public static int get_gcd(int n1, int n2)
int gcd = 0;
if (n1 < n2) // 交换n1、n2的值
n1 = n1 + n2;
n2 = n1 - n2;
n1 = n1 - n2;
if (n1 % n2 == 0)
gcd = n2;
while (n1 % n2 > 0)
n1 = n1 % n2;
if (n1 < n2)
n1 = n1 + n2;
n2 = n1 - n2;
n1 = n1 - n2;
if (n1 % n2 == 0)
gcd = n2;
return gcd;
本回答被提问者采纳
java 如何把小数变成分数
rt
用伪代码表示吧,懒得另外做注释了(1)小数点后面的位数不确定,如果你用浮点类型表示小数,可以直接 类型 分子 = x*1000000; 类型 分母 = 1000000.(2)约分,如果没有找到相关函数。想自己动手解决。2个循环就OK了。 当然有一点要注意,约分只能用10,5,2约分(数学问题,自己想)main() .... where(分子能整除10) 分子=分子/10; 分母=分母/10; where(分子能整除5 and 分母能整除5) 分子=分子/5; 分母=分母/5; where(分子能整除2 and 分母能整除2) 分子=分子/2; 分母=分母/2;... 参考技术A 先得知道有多少位小数,然后乘对应个10,变成整数,0.35就变成了35和100,然后求最大公约数,这里是5,两个数都除以最大公约数,就是7/20了 参考技术B 小数点后面有几位数就是分母下的一后面几个零的决定分子就是小数点后面跟的数,再约分,例如:0.35=35/100=7/20 参考技术C 把小数单独取出来,n。取相应位数的10的倍数,m如1.25 n=25; m=100
那就是1 又25/100
约简,自己处理了。 参考技术D java中哪有分数啊,这个真心不会,围观大神。
以上是关于java怎么把小数转为分母为一位数的分数的主要内容,如果未能解决你的问题,请参考以下文章