2016-03-24 4 views
0

Я использую apach commons library (org.apache.commons.lang.math.Fraction).Как сравнить фракцию с int?

Теперь я сравниваю int и Fraction объект так:

private static final int MAX_VALID_RATIO = 3; 
.... 
fraction.compareTo(Fraction.getFraction(MAX_VALID_RATIO, 1)) 

Это выглядит не красиво.

Fraction.getFraction(MAX_VALID_RATIO) имеет только двойной строитель.

Можете ли вы посоветовать лучше?

+0

Что вы подразумеваете под «Это выглядит не хорошо»? –

+0

@Manuel S. с моей стороны второй аргумент 1 чрезмерный – gstackoverflow

ответ

1

Вы можете просто извлечь intValue() из Fraction и сравнить с значением:

Получает фракцию как int. Это возвращает всю часть части дроби.

Этот метод возвращает значение фракции, усеченной из десятичных знаков. Например, фракция 10/3 будет иметь intValue() из 3.

boolean greater = fraction.intValue() >= MAX_VALID_RATIO 
+0

он вернет неправильный результат, если моя фракция будет 3/1 – gstackoverflow

+0

@gstackoverflow Почему? В этом случае 'intValue()' будет 3. Какой результат вы хотите? – Tunaki

+0

10/3 недействительный результат для меня, но 9/3 действителен – gstackoverflow

0

Сравнивая целое число дроби можно сделать лучше в 2 этапа:

  1. Получить fraction.intValue и сравните ИНТ. Если ваш int строго больше или меньше, чем intValue(), вы можете остановиться здесь.
  2. В противном случае получите разделитель фракции и числитель и выполните: deliminator % numerator. Если это приводит к 0, они равны, иначе доля больше.
+0

это не приятно) – gstackoverflow

+0

Вы можете поместить все это по отдельному методу, но да, это вопрос вкуса, я полагаю;) –