Как мне получить, чтобы floatValue () equals () и compareTo () работали с использованием bigintegers - PullRequest
0 голосов
/ 11 сентября 2010
public class BigFraction
{
 private BigInteger num;
 private BigInteger denom;
 //public static final BigFraction ZERO;
 /**
  *
  * Creates a BigFraction with numeriator BigInteger.ZERO and denominator BigInteger.ONE
  *
  */
 public BigFraction()
 {
   //should be 0/1
   num = BigInteger.ZERO;
   denom = BigInteger.ONE;
 }
 public BigFraction(BigInteger _num, BigInteger _denom)
 {
   num = _num;
   denom = _denom;
 }
 public BigFraction(BigInteger n)
 {
   //n/1
   num = n;
   denom = BigInteger.ONE;
 }
 public BigFraction(int _num, int _denom)
 {
  num = BigInteger.valueOf(_num);
  denom = BigInteger.valueOf(_denom);
 }
 public BigFraction add(BigFraction that)
 {
   return new BigFraction(num.multiply(that.denom).add(that.num.multiply(denom)), denom.multiply(that.denom));
 }
 public BigFraction multiply(BigFraction that)
 {
   return new BigFraction(num.multiply(that.num), denom.multiply(that.denom));
 }
 public BigFraction divide(BigFraction that)
 {
   return new BigFraction(num.multiply(that.denom), denom.multiply(that.num));
 }
 public BigFraction subtract(BigFraction that)
 {
   return new BigFraction(num.multiply(that.denom).subtract(that.num.multiply(denom)), denom.multiply(that.denom));
 }
 public BigFraction abs()
 {
   return new BigFraction(num.abs(), denom.abs());
 }
 public String toString()
 {
   return num + "/" + denom;
 }
 public int compareTo(BigFraction that)
 {
   return new BigFraction(num, denom).compareTo(new BigFraction(that.num, that.denom));
 }
 public boolean equals(Object o)
 {
   if(new BigFraction(num,denom) == o);
   return true;
 }
 public double floatValue()
 {
   //double num = num;
   //double denom = denom;
   return 0;
   //nasty!!!!!
 }
 public BigFraction negate()
 {
   return new BigFraction(BigInteger.ZERO.subtract(num),denom);
 }
 public BigFraction pow(int n)
 {
   return new BigFraction(num.pow(n), denom.pow(n));
 }
}

1 Ответ

1 голос
/ 11 сентября 2010
public boolean equals(Object o) {
    if(new BigFraction(num,denom) == o);
    return true;
}

«Если» на самом деле ничего не делает. Кроме того, просто проверка того же объекта не даст правильного результата. Что вы можете сделать, это:

return o.num.equals(num) && o.denom.equals(o.denom);

Но тогда вам нужно убедиться, что класс автоматически сокращается с 2/4 до 1/2.

public double floatValue() {
    return num.floatValue() / denom.floatValue();
}

Конечно, это не всегда работает (особенно, если denom равен 0).

...