Java获取分数的方法

标签 java fractions

我正在尝试创建一个返回小数的小数值的方法。

//these are included in a class called 'equazioni'

private static long getMCD(long a, long b) {
 if (b == 0)
  { return a; }
 else
  { getMCD(b, a % b); }
 }

public String getFraction(double a) {
 String s = String.valueOf(a);
 int decimali = s.length() - 1 - s.indexOf('.');        

 int den = 1;
 for(int i = 0; i < decimali; i++){
   a *= 10;
   den *= 10;
 }

 int num = (int) Math.round(a);
 long mcd = getMCD(num,den);

 return String.valueOf(num/mcd) + "/" + String.valueOf(den/mcd);
}

这 2 种方法可以完美地处理大多数 值。例如,8.65 返回 173/20,或者 78.24 返回 1956/25。是这样调用的:

equazioni eq = new equazioni(a,b,c); 
jTextField4.setText("8.65= " + eq.getFraction(8.65));

我在处理 2/3、5/18、6/45 等分数时遇到了问题...因为分母可以被 3 整除,所以分数是一个周期数。我如何表示它?

我的问题也是“我如何识别它是一个周期数?”。我以为我可以做这样的事情

int test = den % 3;

如果分母可以被 3 整除,那么我必须以特定方式生成分数。有什么建议吗?

最佳答案

如果我正确理解了你的问题,恐怕它没有一个完整的解决方案。由于 float 以有限位数存储,因此并非所有小数都可以表示,尤其是那些不是十进制数的小数,例如 2/3。即使是十进制数,也不是所有的都可以表示。

换句话说,您的方法永远不会被 2/3 的浮点表示形式作为输入调用,因为这种表示形式不存在。您可能会被调用 0.66666666(无论 Java 中的数字限制是多少),但这不是 2/3...

有关 Java 中浮点表示的更多详细信息,请参阅此链接:http://introcs.cs.princeton.edu/java/91float/

关于Java获取分数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23132982/

相关文章:

html - 如何使用html写分数值?

java - 如何在 Swing 中创建随机矩阵?

c# - 对象是类,因为枚举是...?

java - 通过另一个 Activity 的 onClick 事件将值传递给其容器 Activity 的两个 fragment

C++:将输入的不同部分分配给不同的变量

python - 分数.分数极限分子?

java - 访问 ArrayList 中每个数组的第一个元素并对所有元素求平均值

java - System.out.println 的最佳替代方案是什么?

python - 如何简化一个复杂的比率?

java - 正则表达式带分数