Java中是否有常用的有理数库?

2022-09-01 09:00:15

我正在寻找一个表示分数(有理数)的Java库。例如,如果我想存储分数,那么它不会被保存,因为它会失去其准确性。1/30.33333

以下是我希望在这样的库中找到的一些功能:

  • getNumerator()
  • getDenominator()
  • add(Rational r1, Rational r2), , ,subtract(Rational r1, Rational r2)multiply(Rational r1, Rational r2)divide(Rational r1, Rational r2)
  • isProper()
  • getCommonDenominator(Collection<Rational> rationals)
  • getSimplified()

我可以自己实现这样一个库,尽管我想知道是否已经存在类似的东西。

编辑:如果库实现(除了上述之外)一些数论算法,例如等,那也会很好。getEgyptianFractionsSum()


答案 1

Apache Commons Math适合你吗?


答案 2

JScience图书馆包括org.jscience.math.number.Rational类。除了通常的工厂、访问器和操作之外,还可以构造其他有用的实体,包括 、 和 。Polynomial<Rational>Vector<Rational>Matrix<Rational>

例如,获取分数集合的最低公分母的函数可能如下所示:

private static LargeInteger lcd(Collection<Rational> fractions) {
    Rational sum = Rational.ZERO;
    for (Rational rational : fractions) {
        sum = sum.plus(rational);
    }
    return sum.getDivisor();
}

以下语句打印:6

System.out.println(lcd(Arrays.asList(
    Rational.valueOf(1, 2), Rational.valueOf(1, 3))));