LINUX.ORG.RU

перевод чисел в текст


0

0

Понимаю, что вопрос дурацкий, но самому писать эти огромные if-else просто лень.
Собственно интересует функция, которая «12850,35» перепишет в виде «Двенадцать тысяч восемьсот пятьдесят руб. 35 коп.»
Если у кого-то есть готовое - поделитесь, плз.
Поисковые системы упорно выдают ссылки на on-line словари и т.п.

P.S. не лабараторная работа. если кому-то интересно - могу дать исходники библиотеки, которая печатает первичную документацию (счет, накладная, акт выполненных работ). Собственно для нее и необходимо.

★★★★★

Это одна из задач на любых компьютерных курсах для школьников.

tia ()

>Понимаю, что вопрос дурацкий, но самому писать эти огромные if-else просто лень.

Пиши case или обратись в телефонную компанию - там бабароботы счет даже проговаривают.

anonymous ()
Ответ на: комментарий от tia

Re: Это одна из задач на любых компьютерных курсах для школьников.

А толку то? Свои исходники десятелетней давности искать?

trex6 ★★★★★ ()
Ответ на: комментарий от record

Для русского будет то же самое, только раза в два длиннее (из-за особенностей языка вроде: два/две, один/одна, тысяча/тысячи/тысяч). В принципе, если чуть подумать, можно код переписать на русский.

Eddy_Em ☆☆☆☆☆ ()

странно, что лисперы еще не подтянулись...

Pi ★★★★★ ()
Ответ на: комментарий от Pi

>странно, что лисперы еще не подтянулись...

Так он только на английском проговаривает, да и то лишь целые числа:

>(format t «~R~%» 12850)

>twelve thousand, eight hundred and fifty

linuxfan ()

240 строк с копипастом и 2 часа работы со счётом до 1000 квадриллионов (около предела uint64_t) . Не надо ленться, задачка интересная.

218825245867.54: двести восемнадцать миллиардов восемьсот двадцать пять миллионов двести сорок пять тысяч восемьсот шестьдесят семь рублей и пятьдесят четыре копейки

999934894841.00: девятьсот девяносто девять миллиардов девятьсот тридцать четыре миллиона восемьсот девяносто четыре тысячи восемьсот сорок один рубль и ноль окон

704276459934.05: семьсот четыре миллиарда двести семьдесят шесть миллионов четыреста пятьдесят девять тысяч девятьсот тридцать четыре рубля и пять копеек

096872639826.10: девяносто шесть миллиардов восемьсот семьдесят два миллиона шестьсот тридцать девять тысяч восемьсот двадцать шесть рублей и десять копеек

897302731800.53: восемьсот девяносто семь миллиардов триста два миллиона семьсот тридцать одна тысяча восемьсот рублей и пятьдесят три копейки

227792490930.85: двести двадцать семь миллиардов семьсот девяносто два миллиона четыреста девяносто тысяч девятьсот тридцать рублей и восемьдесят пять копеек

938814212793.97: девятьсот тридцать восемь миллиардов восемьсот четырнадцать миллионов двести двенадцать тысяч семьсот девяносто три рубля и девяносто семь копеек

196605787453.00: сто девяносто шесть миллиардов шестьсот пять миллионов семьсот восемьдесят семь тысяч четыреста пятьдесят три рубля и ноль окон

549672172107.34: пятьсот сорок девять миллиардов шестьсот семьдесят два миллиона сто семьдесят две тысячи сто семь рублей и тридцать четыре копейки

066948051835.11: шестьдесят шесть миллиардов девятьсот сорок восемь миллионов пятьдесят одна тысяча восемьсот тридцать пять рублей и одиннадцать копеек

511769719116.96: пятьсот одиннадцать миллиардов семьсот шестьдесят девять миллионов семьсот девятнадцать тысяч сто шестнадцать рублей и девяносто шесть копеек

875294316158.76: восемьсот семьдесят пять миллиардов двести девяносто четыре миллиона триста шестнадцать тысяч сто пятьдесят восемь рублей и семьдесят шесть копеек

047959412581.18: сорок семь миллиардов девятьсот пятьдесят девять миллионов четыреста двенадцать тысяч пятьсот восемьдесят один рубль и восемнадцать копеек

903512548103.53: девятьсот три миллиарда пятьсот двенадцать миллионов пятьсот сорок восемь тысяч сто три рубля и пятьдесят три копейки

277248154850.98: двести семьдесят семь миллиардов двести сорок восемь миллионов сто пятьдесят четыре тысячи восемьсот пятьдесят рублей и девяносто восемь копеек

458655599298.35: четыреста пятьдесят восемь миллиардов шестьсот пятьдесят пять миллионов пятьсот девяносто девять тысяч двести девяносто восемь рублей и тридцать пять копеек

771405396922.86: семьсот семьдесят один миллиард четыреста пять миллионов триста девяносто шесть тысяч девятьсот двадцать два рубля и восемьдесят шесть копеек

448757511249.82: четыреста сорок восемь миллиардов семьсот пятьдесят семь миллионов пятьсот одиннадцать тысяч двести сорок девять рублей и восемьдесят две копейки

anonymous ()
Ответ на: комментарий от KRoN73

Там ошибки в питоне. На вызов print int2numeral(102000201) выдаёт «сто два миллиона тысяч двести один» вместо «сто два миллиона двести один». И среднего рода нет чтобы окна посчитать.

anonymous ()
Ответ на: комментарий от anonymous

Ну так допиши пару строк. Это же опенсорс :)

KRoN73 ★★★★★ ()

я помню мне на собеседовании такую дали))

antony986 ()
Ответ на: комментарий от anonymous

>Не надо ленться, задачка интересная.

Интересная, если попробовать написать для всех родов/падежей/типов числительных - вот это интересно. А просто «руб/коп» или для произвольного рода - даже на VBA полтора экрана (800х600) кода

>странно, что лисперы еще не подтянулись...


пробовал в вышеозвученном варианте - сломался на порядковых числительных большой разрядности... =) (влом стало)

yyk ★★★★★ ()
Ответ на: комментарий от yyk

Все 3 рода и 6 падежей числительных до 2^64 степени (легко сделать и больше, но типов целых данных большего размера нет) занимает 200 строк С++ вместе с тестовым выводом и пишется менее чем за 1 день. Сами рубли, копейки и др., которые должны быть единицами измерения, нужно просто задать в уже готовом виде в массиве 6x3 (6 падежей-3 типа чисел) как входящем параметре.

Результат:

7118210532609.43: 
                                             Именительный                                             
семь триллионов сто восемнадцать миллиардов двести десять миллионов пятьсот тридцать две тысячи шестьсот девять рублей и сорок три копейки
                                             Родительный                                             
семи триллионов сто восемнадцати миллиардов двухсот десяти миллионов пятисот тридцати двух тысяч шестисот девяти рублей и сорока трёх копеек
                                             Дательный                                             
семи триллионам сто восемнадцати миллиардам двумстам десяти миллионам пятистам тридцати двум тысячам шестистам девяти рублям и сорока трём копейкам
                                             Винительный                                             
семь триллионов сто восемнадцать миллиардов двести десять миллионов пятьсот тридцать две тысячи шестьсот девять рублей и сорок три копейки
                                             Творительный                                             
семью триллионами ста восемнадцатью миллиардами двумястами десятью миллионами пятистами тридцатью двумя тысячами шестистами девятью рублями и сорока тремя копейками
                                             Предложный                                             
семи триллионах ста восемнадцати миллиардах двухстах десяти миллионах пятистах тридцати двух тысячах шестистах девяти рублях и сорока трёх копейках

4381024964418.48: 
                                             Именительный                                             
четыре триллиона триста восемьдесят один миллиард двадцать четыре миллиона девятьсот шестьдесят четыре тысячи четыреста восемнадцать рублей и сорок восемь копеек
                                             Родительный                                             
четырёх триллионов трёхсот восемьдесяти одного миллиарда двадцати четырёх миллионов девятисот шестьдесяти четырёх тысяч четырёхсот восемнадцати рублей и сорока восьми копеек
                                             Дательный                                             
четырём триллионам трёмстам восемьдесяти одному миллиарду двадцати четырём миллионам девятистам шестьдесяти четырём тысячам четырёхстам восемнадцати рублям и сорока восьми копейкам
                                             Винительный                                             
четыре триллиона триста восемьдесят один миллиард двадцать четыре миллиона девятьсот шестьдесят четыре тысячи четыреста восемнадцать рублей и сорок восемь копеек
                                             Творительный                                             
четырьмя триллионами трёхстами восемьюдесятью одним миллиардом двадцатью четырьмя миллионами девятистами шестьюдесятью четырьмя тысячами четырехстами восемнадцатью рублями и сорока восемью копейками
                                             Предложный                                             
четырёх триллионах трёхстах восьмидесяти одном миллиарде двадцати четырёх миллионах девятистах шестьдесяти четырёх тысячах четырёхстах восемнадцати рублях и сорока восьми копейках
anonymous ()
Ответ на: комментарий от anonymous

>Все 3 рода и 6 падежей числительных

Я-ж говорил - это не интересно. Добавь сюда все виды числительных - и получишь море удовольствия :):):)

yyk ★★★★★ ()
Ответ на: комментарий от yyk

Ещё хуже: в частности падежи единиц измерения могут меняться у разных чисел в одном падеже. Например творительный: одним рублём, десятью рублями, одной тысячей пятью рублями. НО одной тысячей рублей и нулём рублей. Рубли с тысячей и миллионом и т.п. в творительном падеже числительного переходят в родительный падеж.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.