Module bus.core

Class Fraction

java.lang.Object
java.lang.Number
org.miaixz.bus.core.math.Fraction
All Implemented Interfaces:
Serializable, Comparable<Fraction>

public final class Fraction extends Number implements Comparable<Fraction>
Fraction 是一个 Number 实现, 可以准确地存储分数。

此类是不可变的,并且与大多数接受 Number 的方法兼容。

请注意,此类适用于常见用例,它是基于 int 的, 因此容易受到各种溢出问题的影响。对于基于 BigInteger 的等效类, 请参见 Commons Math 库中的 BigFraction 类。

此类来自:Apache Commons Lang3

Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Field Details

  • Constructor Details

    • Fraction

      public Fraction(int numerator, int denominator)
      使用分数的两个部分构造一个 Fraction 实例,例如 Y/Z。
      Parameters:
      numerator - 分子,例如在“七分之三”中的三
      denominator - 分母,例如在“七分之三”中的七
  • Method Details

    • of

      public static Fraction of(double value)
      double 值创建一个 Fraction 实例。

      此方法使用 连分数算法,最多计算 25 个收敛项,并将分母限制在 10,000 以内。

      Parameters:
      value - 要转换的 double 值
      Returns:
      一个新的分数实例,接近该值
      Throws:
      ArithmeticException - 如果 |value| > Integer.MAX_VALUEvalue = NaN
      ArithmeticException - 如果计算出的分母为 zero
      ArithmeticException - 如果算法不收敛
    • of

      public static Fraction of(int numerator, int denominator)
      使用分数的两个部分 Y/Z 创建一个 Fraction 实例。 任何负号都会被解析到分子上。
      Parameters:
      numerator - 分子,例如 '3/7' 中的 3
      denominator - 分母,例如 '3/7' 中的 7
      Returns:
      一个新的分数实例
      Throws:
      ArithmeticException - 如果分母为 zero 或分母为 negative 且分子为 Integer#MIN_VALUE
    • of

      public static Fraction of(int whole, int numerator, int denominator)
      使用分数的三个部分 X Y/Z 创建一个 Fraction 实例。 负号必须传递到整数部分。
      Parameters:
      whole - 整数部分,例如 '一又七分之三' 中的 一
      numerator - 分子,例如 '一又七分之三' 中的 三
      denominator - 分母,例如 '一又七分之三' 中的 七
      Returns:
      一个新的分数实例
      Throws:
      ArithmeticException - 如果分母为 zero
      ArithmeticException - 如果分母为负数
      ArithmeticException - 如果分子为负数
      ArithmeticException - 如果结果分子超过 Integer.MAX_VALUE
    • of

      public static Fraction of(String str)
      String 创建一个 Fraction。

      接受的格式有:

      1. 包含点的 double 字符串
      2. 'X Y/Z'
      3. 'Y/Z'
      4. 'X'(一个简单的整数)

      和一个 .。

      Parameters:
      str - 要解析的字符串,必须不为 null
      Returns:
      新的 Fraction 实例
      Throws:
      NullPointerException - 如果字符串为 null
      NumberFormatException - 如果数字格式无效
    • ofReduced

      public static Fraction ofReduced(int numerator, int denominator)
      使用分数的两个部分 Y/Z 创建一个简化后的 Fraction 实例。

      例如,如果输入参数表示 2/4,则创建的分数将是 1/2。

      任何负号都会被解析到分子上。

      Parameters:
      numerator - 分子,例如 '3/7' 中的 3
      denominator - 分母,例如 '3/7' 中的 7
      Returns:
      一个新的分数实例,分子和分母已简化
      Throws:
      ArithmeticException - 如果分母为 zero
    • abs

      public Fraction abs()
      获取与此分数等值的正分数。

      更精确地说:(fraction >= 0 ? this : -fraction)

      返回的分数不会被约简。

      Returns:
      如果此分数为正,则返回 this;否则返回一个新的正分数实例,其分子符号相反
    • add

      public Fraction add(Fraction fraction)
      将此分数与另一个分数相加,并返回约简后的结果。 该算法遵循 Knuth 的 4.5.1 节。
      Parameters:
      fraction - 要添加的分数,不能为空
      Returns:
      包含结果值的 Fraction 实例
      Throws:
      NullPointerException - 如果传入的分数为 null
      ArithmeticException - 如果结果的分子或分母超出 Integer.MAX_VALUE
    • divideBy

      public Fraction divideBy(Fraction fraction)
      将此分数除以另一个分数。
      Parameters:
      fraction - 要除以的分数,不能为空
      Returns:
      包含结果值的 Fraction 实例
      Throws:
      NullPointerException - 如果传入的分数为 null
      ArithmeticException - 如果要除以的分数为零
      ArithmeticException - 如果结果的分子或分母超出 Integer.MAX_VALUE
    • getDenominator

      public int getDenominator()
      获取分数的分母部分。
      Returns:
      分数的分母部分
    • getNumerator

      public int getNumerator()
      获取分数的分子部分。

      此方法可能返回一个大于分母的值,即一个假分数,例如 7/4 中的七。

      Returns:
      分数的分子部分
    • getProperNumerator

      public int getProperNumerator()
      获取真分数的分子部分,始终为正数。

      一个假分数 7/4 可以分解为真分数 1 3/4。 此方法返回真分数中的 3。

      如果分数为负数,例如 -7/4,可以分解为 -1 3/4, 因此此方法返回正数的真分数分子,即 3。

      Returns:
      真分数的分子部分,始终为正数
    • getProperWhole

      public int getProperWhole()
      获取真分数的整数部分,包括符号。

      一个假分数 7/4 可以分解为真分数 1 3/4。 此方法返回真分数中的 1。

      如果分数为负数,例如 -7/4,可以分解为 -1 3/4, 因此此方法返回真分数的整数部分 -1。

      Returns:
      真分数的整数部分,包括符号
    • invert

      public Fraction invert()
      获取此分数的倒数 (1/fraction)。

      返回的分数不会被约简。

      Returns:
      一个新分数实例,其分子和分母互换
      Throws:
      ArithmeticException - 如果分数表示零
    • multiplyBy

      public Fraction multiplyBy(Fraction fraction)
      将此分数与另一个分数相乘,并返回约简后的结果。
      Parameters:
      fraction - 要乘以的分数,不能为空
      Returns:
      包含结果值的 Fraction 实例
      Throws:
      NullPointerException - 如果传入的分数为 null
      ArithmeticException - 如果结果的分子或分母超出 Integer.MAX_VALUE
    • negate

      public Fraction negate()
      获取此分数的负数 (-fraction)。

      返回的分数不会被约简。

      Returns:
      一个新分数实例,其分子符号相反
    • pow

      public Fraction pow(int power)
      获取此分数的指定幂次。

      返回的分数已约简。

      Parameters:
      power - 要将分数提升到的幂次
      Returns:
      如果幂次为一,则返回 this;如果幂次为零(即使分数等于零),则返回 ONE; 否则返回一个新的分数实例,提升到相应的幂次
      Throws:
      ArithmeticException - 如果结果的分子或分母超出 Integer.MAX_VALUE
    • reduce

      public Fraction reduce()
      将分数约简为分子和分母的最小值,并返回结果。

      例如,如果此分数表示 2/4,则结果将是 1/2。

      Returns:
      一个新的约简后的分数实例,如果无法进一步简化,则返回此实例
    • subtract

      public Fraction subtract(Fraction fraction)
      从此分数中减去另一个分数的值,并返回约简后的结果。
      Parameters:
      fraction - 要减去的分数,不能为空
      Returns:
      包含结果值的 Fraction 实例
      Throws:
      NullPointerException - 如果传入的分数为 null
      ArithmeticException - 如果结果的分子或分母无法表示为 int
    • toProperString

      public String toProperString()
      获取此分数的真分数形式的字符串表示,格式为 X Y/Z。

      使用的格式为 '整数部分 分子/分母'。 如果整数部分为零,则省略整数部分。如果分子为零,则仅返回整数部分。

      Returns:
      分数的字符串表示形式
    • doubleValue

      public double doubleValue()
      Specified by:
      doubleValue in class Number
    • floatValue

      public float floatValue()
      Specified by:
      floatValue in class Number
    • intValue

      public int intValue()
      Specified by:
      intValue in class Number
    • longValue

      public long longValue()
      Specified by:
      longValue in class Number
    • compareTo

      public int compareTo(Fraction other)
      Specified by:
      compareTo in interface Comparable<Fraction>
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object