Как представлять смешанные фракции в Java - PullRequest
4 голосов
/ 24 ноября 2010

Существует способ представить дроби свыше здесь . Существует ли четкая абстракция для представления смешанных дробей, чтобы вы могли выполнять над ней операции сложения, вычитания и умножения.

Ответы [ 6 ]

9 голосов
/ 24 ноября 2010

Смешанная дробь является только разницей в отображении, а не математической. Вы можете просто преобразовать его в смешанный, когда печатаете ответ.

6 голосов
/ 24 ноября 2010

Возможно, вы могли бы сделать это, расширив Fraction: возможно, вы захотите добавить новый конструктор, который принимает целое число в дополнение к числителю / знаменателю new MixedFraction(2,3,4) для 2 3/4 и переопределить toString для отображенияв нужном формате.

3 голосов
/ 24 ноября 2010

Что ж, я думаю, что вы можете превратить это в неправильную дробь, добавив дробную часть с целым числом, выполните операции, используя методы, упомянутые на странице, на которую вы ссылаетесь, и преобразуйте ее обратно в смешанную дробь, выполнив это:

String turnImproperFractionToMixedFraction(Fraction f) {
    int a = f.getNumerator() / f.getDenominator();
    int b = f.getNumerator() % f.getDenominator();
    return a != 0 ? (a + " " + b + "/" + f.getDenominator()) : (b + "/" + f.getDenominator());
}

Используя это, мы можем сделать это:

Fraction f = new Fraction(8, 3);
System.out.println(turnImproperFractionToMixedFraction(f));

Который должен распечатать 2 2/3

1 голос
/ 24 ноября 2010

Похоже, вы могли бы использовать FractionFormat или ProperFractionFormat (в том же пакете Apache Commons, на который вы ссылались) для преобразования между Fraction объектами и String объектами, представляющими смешанные дроби.

1 голос
/ 24 ноября 2010

Я думаю, что если вы будете отслеживать числа как числитель и знаменатель (неправильные дроби - числители больше, чем знаменатели - также), это упростит вашу задачу:

public class myFraction {
    int numerator;
    int denominator;

    ... constructors and methods ...
}

Затем, когда вы захотите сделать сложение и вычитание, вы сможете быстрее найти ЖК-дисплей и работать в одном представлении.

Если вы хотите отобразить его в виде строки, вы можете легко найти количество целых делений [т.е. пол (числитель / знаменатель)] и вы можете найти остаток, используя любой модуль:

numerator % denominator + "/" + denominator

или вы можете сохранить полученное значение от пола (числитель / знаменатель) и вычесть его из необработанного деления, что даст вам дробный компонент (0 <= x <1), т. Е. </p>

int myDivision = numerator/denominator;
int myFloor = floor(myDivision);

int fracComponent = myDivision - myFloor; //a number between 0 and 1
int mixedNumerator = fracComponent * denominator; //the numerator of your mixed part

дисплей выглядит как

myFloor + " " + mixedNumerator + "/" + denominator //i.e. 3 1/3

Калькулятор, который я использовал давным-давно, когда изучал алгебру, отображал смешанную дробь и показывал ответ как 3u1 / 3 (для «единиц»)

Есть несколько способов уменьшить количество операций, чтобы получить все необходимые факты из числа. Вы делаете манипуляции с десятичными числами, которые вы должны превратить в смешанные дроби, или вы начинаете с нуля для ввода?

Я не знаю ни одного API на основе Java, который имеет эту встроенную функциональность, но это не так сложно реализовать самостоятельно и, безусловно, является хорошим упражнением

0 голосов
/ 21 сентября 2014

Если вы хотите, чтобы ваша фракция отображалась как смешанная дробь, попробуйте это!

     if ((numer >= denom) & (numer % denom == 0)){
        impFrac = numer / denom;
        System.out.print(numer);
        System.out.print("/"+denom);
        System.out.print(" is an improper fraction, and can be reduced to "+impFrac);
        System.out.println(".");
    }
    else if (numer > denom){
        impFrac = numer / denom;
        mixFrac = numer % denom;
        System.out.print(numer);
        System.out.print("/"+denom);
        System.out.print(" is an improper fraction, and its mixed fraction is "+impFrac);
        System.out.print(" and "+mixFrac);
        System.out.print("/"+denom);
        System.out.println(".");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...