2015-07-03 2 views
0

У меня есть следующий вопрос: я хотел бы преобразовать фракции, такие как 1/2, 3/4, в устные слова в Java, такие как «Одна половина» или «Три четверти».Преобразование фракций в слова в Java

Есть ли способ (псевдокод) или полезность в Java, которая производит, что выход приема в основном число

Что-то вроде:

getSpokenWords(numerator, denominator) возвращает «Одна половина»

Было бы очень ценится.

+1

y u no make ur собственный метод getSpokenWords? –

ответ

1

Вы можете реализовать свою логику, просто используя if-else или switch очень легко в вашем getSpokenWords(numerator, denominator) потому что вы знаете лучше ваши ожидаемый вклад в denominator и numerator, так как все ожидаемые затраты на нас не может быть достойным & подходит для вас. Вы можете сохранить HashMap<Integer, String> для denominator и numerator, Integer будучи значение denominator и numerator и String быть их партнерами Альфа и может get() значения из него соответственно.

+0

Если это сработало, вы можете пометить его как правильно –

1

Нет стандартной библиотеки, которую я знаю об этом, и, насколько я знаю, вы не можете сделать масштабируемое решение для этого.

Один из подходов, который я бы рекомендовал, заключается в создании массивов, которые по существу сопоставляют числа с их аналогами. Например, метод

String[] numerators = {"One", "Two", "Three", ... // etc., until you reach your desired limit 
String[] denominators = {"whole", "hal", "third", ... 

Ваш getSpokenWords (числитель, знаменатель) может затем объединять эти строки и добавить множественные концовки, если это необходимо. («Половина» указана как «hal» из-за ее неправильной формы множественного числа, так что вы можете объединить «ves» или «f» по мере необходимости).

Редактировать: Если вы хотите быть умным, вы можете даже использовать циклы, деление и по модулю, чтобы разделить более высокие числа на свои значения. 525600, например, можно разделить на 525 и 600, где вы можете получить текстовый эквивалент 525 (пятьсот двадцать пять) и добавить к нему «тысячу». Конечно, получение строки «пятьсот двадцать пять» также требует разделения в себе.

0

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

HashMap<String, String> hashmap = new HashMap<String, String>(); 
hashmap.put("1/2", "One half"); 
hashmap.put("3/4", "Three quarters"); etc 

Оттуда все, что вам нужно сделать, это преобразовать переданные числа в строку.
.

int numerator = 1; 
int denominator = 2; 
String fraction = numerator + "/" + denominator; 
String word = hashmap.get(fraction); 

Так в основном:

public String getSpokenWords(int numerator, int denominator) { 
    String fraction = numerator + "/" + denominator; 
    String word = hashmap.get(fraction); 
    return word == null? "": word; 
} 

Просто создайте большой HashMap с вашими случаях

1

http://www.rgagnon.com/javadetails/java-0426.html

он сделал это с нормальными номерами вам просто нужно изменить его немного использовать его код для нумератора, и вам понадобится второй для знаменателя для добавления i-го или третьего или любого другого.

+0

Концы для порядковых номеров (знаменателей) на удивление регулярны, как только вы пройдете первые двадцать. Первых в течение 1, секунды для 2, трети для 3, пятых для 5, восьмого для 8, -ths для остальных. Должно быть легко адаптировать код, связанный с порядковыми номерами. –

Смежные вопросы