@crurian

Как написать «62 рубля 00 копеек», и «37 рублей 12 копеек»?

Нужно число 62.00 и число 37.12 написать так, чтобы получилось "62 рубля 00 копеек" и "37 рублей 12 копеек".
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 6
@mayton2019
Bigdata Engineer
Задача называется "Сумма прописью". Она решена тысячу раз для всех языков программирования. Исходников много. Ищите. Легко найдете.

Других трудностей здесь нет.
Ответ написан
Комментировать
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
  • Привести к строке.
  • Разделить полученные строки по точке.
  • По необходимости написать код для подбора окончаний.
  • Сформировать строку.
Ответ написан
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
А что конкретно вам не понятно в этой задаче? Это не биржа фрилансеров и никто вам не будет делать готвого решения, поэтому задавая вопрос нужно показать как вы сами пытаетесь решить свою проблему, и вам покажут где вы не правы.

Ну давайте резберем вашу задачу на части. Это называется декомпозиция. Любые задачи нужно решать начиная с декомпозиции - разбиения на более простые подзадачи.

Итак, в чем проблема? Вам не ясно как число разбить на целую и дробную часть? Окей, ещё глубже декомпозируем: вам не ясно как отбросить дробную часть, чтобы получить число рублей? Или вам не ясно как получить целое число копеек?

Допустим это вы сделали. Что вам ещё не ясно? Как правильно согласовать два слова с числами?
Ну так в школе это изучается. Вроде ж всё просто. Есть всего три варианта: "рублей", "рубль", "рубля". Обычно эти варианты принято нумеровать: 0 - рублей, 1 - рубль, 2- рубля.
Да, с 2 до 4 - это то же самое, что 2 (рубля). Ноль, а также с 5 до 19 - это то же самое, что 0 (рублей). Осталось получить остаток от деления числа на 20, привести это к по формуле выше к одной и трёх цифр и получите нужный вариант словоформы.
Выходит для любого слова, которое нужно согласовать с числительным, нужно предусмотреть три варианта и сделать функцию, которая будет их правильно выбирать в зависимости от числа.
Да, там могут быть ещё варианты с падежами и родами, но это не про ваш случай.

Ок. что е вам ещё может быть не ясно? Как подставить в текстовый шаблон параметры?

Вопросы надо конкретизировать.
Ответ написан
Комментировать
soulilya
@soulilya
Культурный, утонченный и изысканный.
foo = 62.00
print (format(foo, '.2f'))
Ответ написан
Комментировать
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Конечно, эта задача решается довольно просто своими несложными велосипедами.
Но можно также посмотреть в сторону библиотеки humanize
Я не уверен, что там есть случай именно под вашу задачу, но можете поискать, возможно найдете готовое решение там.
Ответ написан
Комментировать
@RimmaKur
Вроде человек
я бы сделал как-то так:
sum_float = 235.99
sum_str_int = str(int(sum_float*100))
sum_str = sum_str_int[:-2] + ' рублей ' + sum_str_int[-2:] + ' копеек'

m2XXUbW.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы