Преобразование дробей в слова в Java

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

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

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

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

Было бы очень признательно.


person tludmetal    schedule 03.07.2015    source источник
comment
Вы не делаете свой собственный метод getSpokenWords?   -  person rakeb.mazharul    schedule 03.07.2015


Ответы (4)


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

person Ankit Nigam    schedule 03.07.2015

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

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

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 (пятьсот двадцать пять) и добавить к нему «тысяча». Конечно, получение строки «пятьсот двадцать пять» также само по себе требует разделения.

person Aaron Ong    schedule 03.07.2015

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

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

person Solomon P Byer    schedule 03.07.2015
comment
Окончания порядковых чисел (знаменатели) на удивление регулярны, как только вы пройдете первые двадцать. Первые за 1, секунды за 2, трети за 3, пятые за 5, восьмые за 8, -ths за остальные. Должно быть легко адаптировать код, который вы связали, с порядковыми номерами. - person Edward Doolittle; 04.07.2015

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

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;  
}  

Просто создайте большую хеш-карту с вашими делами

person Cratylus    schedule 03.07.2015