ЧислоПрописью с дефисами

1. netesoff 4 12.12.19 08:22 Сейчас в теме
Всем привет.
Можно ли стандартной функцией ЧислоПрописью() получить пропись в следующем формате:
Twenty-four thousand one hundred thirty-six dollars and 69 cents? Вроде как по правилам именно такое представление является корректным.

Вопрос только в дефисах при выводе составного числительного twenty-four, thirty-six.
Переключение локализации между американским/британским английским не помогло, использование упрощенной/классической прописи тоже. Платформа 8.3.15.1656
Найденные решения
9. user856012 13 12.12.19 11:34 Сейчас в теме
(8)
почему 48?
Пардон, это я как 1С-ник посчитал, а не как программист.
вроде 9 всего
Не согласен (в первую очередь с самим собой в (7)), достаточно всего 6:
"ty o" > "ty-o" "ty t" > "ty-t" "ty f" > "ty-f" "ty s" > "ty-s" "ty e" > "ty-e" "ty n" > "ty-n"
user774630; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ice-net 19 12.12.19 09:36 Сейчас в теме
(1) Мне кажется обойтись одной лишь этой функцией не выйдет.
или писать аналог этой функции с нужным результатом или использовать стрзаменить() и менять, или какие-то сторонние решения.
5. netesoff 4 12.12.19 10:24 Сейчас в теме
(2) Да, похоже только так
3. user-z99999 67 12.12.19 09:38 Сейчас в теме
Сообщить(ЧислоПрописью(1234.56, "Л=en_US;ДП=Истина", "dollar,dollars,cent,cents,2"));
4. netesoff 4 12.12.19 10:24 Сейчас в теме
(3) без обид, но сами-то пробовали посмотреть результат?
мне такое возвращается: "One thousand two hundred thirty four dollars fifty six cents"
требуемый вариант "One thousand two hundred thirty-four dollars and fifty-six cents"
6. user-z99999 67 12.12.19 10:26 Сейчас в теме
(4)
А далее, результат обработай через СтрЗаменить
Можешь написать свою функцию.
7. user856012 13 12.12.19 11:01 Сейчас в теме
(6)
А далее, результат обработай через СтрЗаменить
Ага, всего-то 48 замен. ;)
8. EVKash 14 12.12.19 11:24 Сейчас в теме
(7) почему 48? вроде 9 всего
"ty one" > "ty-one" ..... "ty nine" > "ty-nine"
9. user856012 13 12.12.19 11:34 Сейчас в теме
(8)
почему 48?
Пардон, это я как 1С-ник посчитал, а не как программист.
вроде 9 всего
Не согласен (в первую очередь с самим собой в (7)), достаточно всего 6:
"ty o" > "ty-o" "ty t" > "ty-t" "ty f" > "ty-f" "ty s" > "ty-s" "ty e" > "ty-e" "ty n" > "ty-n"
user774630; +1 Ответить
11. EVKash 14 12.12.19 11:39 Сейчас в теме
(9) twenty thousand?
я бы не мудрил ;)
12. user856012 13 12.12.19 11:43 Сейчас в теме
(11)
twenty thousand?
Ну откуда у программиста такие деньги? ;)
15. user856012 13 13.12.19 10:25 Сейчас в теме
(11)
я бы не мудрил ;)
А я все-таки еще чуть-чуть помудрил и сократил до трех замен:

ПредставлениеСуммы = СтрЗаменить(СтрЗаменить(СтрЗаменить(ПредставлениеСуммы,"ty ","ty-"),"ty-thousand","ty thousand"),"ty-dollar","ty dollar");


Для богатых - четыре замены:

ПредставлениеСуммы = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПредставлениеСуммы,"ty ","ty-"),"ty-million","ty million"),"ty-thousand","ty thousand"),"ty-dollar","ty dollar");
16. EVKash 14 13.12.19 15:26 Сейчас в теме
10. netesoff 4 12.12.19 11:39 Сейчас в теме
Может кому еще понадобится

Процедура ПреобразоватьПредставлениеПоПравилу(ПредставлениеСуммы)
	
	Для йота = 21 По 99 Цикл
		
		// составное числительное в начале строки
		ТекПредставление = ЧислоПрописью(йота, "L=en_US;НП=Ложь;", ",,,,0");
		Если СтрНайти(ПредставлениеСуммы, ТекПредставление) Тогда
			ПредставлениеСуммы = СтрЗаменить(ПредставлениеСуммы, ТекПредставление, СтрЗаменить(ТекПредставление, " ", "-"));
		КонецЕсли;	
		
		// составное числительное в середине строки
		ТекПредставление = НРег(ТекПредставление);
		Если СтрНайти(ПредставлениеСуммы, ТекПредставление) Тогда
			ПредставлениеСуммы = СтрЗаменить(ПредставлениеСуммы, ТекПредставление, СтрЗаменить(ТекПредставление, " ", "-"));
		КонецЕсли;	
		
	КонецЦикла;	
	
КонецПроцедуры
Показать
13. EVKash 14 12.12.19 11:43 Сейчас в теме
(10) 79 итераций? по 2 стрнайти? оптимальность? не... не слышали
user774630; +1 Ответить
14. netesoff 4 13.12.19 04:36 Сейчас в теме
(13) Да, Ваш вариант лучше.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот