Страницы: 1 2 След.
RSS
Сумма прописью на украинском (и на русском и на других языках)
 
Нужно преобразовать число денег в текст. "124,45" в "сто двадцять чотири гривні 45 копійок".
Будет круто собрать здесь решения на других языках (кроме русского и украинского). Читал, что на английском есть, но в своей работе не применял и не проверял.
--
Это не вопрос. Просто постфактум делюсь своим решением.
Мог бы в уже существующие темы написать, но они архивные.
 
http://www.excelworld.ru/forum/3-9902-1
 
В интернете нашел надстройку "sumprop.xla", но в ней есть оИшибка:
"2002002002" получается "Две миллиарда две миллиона две тысячи две гривны 00 копеек"
Диапазон от 0 до 999999999999
Функции: СуммаПрописью, СуммаПрописьюЕвро, СуммаПрописьюДоллары, СуммаПрописьюГривны
Исправил ошибку "sumpropRU.xla" (в "sumprop.xla" неверно применялся женский род и разряд тысяч был через костыль)
Перевел на украинский "sumpropUK.xla" (ну и поменял логику из-за разницы между "п’ятдесят" и "пятьдесят" - загвоздка в мягком знаке)

А так-же нашел на этом форуме решение для одного извращенца без макросов "sumpropUK_notVBA.xls" (сам не проверял, но в теме вроде не ругались на автора)
Изменено: illianull - 23.01.2019 20:51:26
 
Цитата
MCH написал:
http://www.excelworld.ru/forum/3-9902-1
Спасибо MCH!!! Офигенные наработки!
А вот некоторые ссылки, по этому форуму на тему "сумма прописью"
цифры прописью и загадочные функции
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=2608
Сумма прописью!
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=36916
Число прописью
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=4431
число прописью на украинском
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=29563
========Добавлено========
Сумма прописью VBA для UNICODE
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=129782
Изменено: illianull - 28.10.2020 11:57:28
 
у меня есть функция Пропис (публиковалась тут)
с приписью числительных на украинском, русском, таджикском и азербайджанском языках. это не 4 разных функции, это 1 функция, язык там указываеися параметром

из особенностей:
1. копейки тоже может прописать прописью - задается параметром
2. в алгоритм вложены числительные женского, мужского и среднего рода
3. поэтому можно приписать любые предметы,
   например ведра (ведро - это оно) - задается текстовым параметром "0-вёдер .1-ведро .4-ведра" (получим: 1 = Одно ведро,   24 = Двадцать четыре ведра,  107 = Сто семь вёдер или то же самое на украинском "0-відер .1-відро .4-відра"). эта же функция может прописать СЛОНОВ ("0-слонов .1-слон .4-слона") и ПАРТЫ
3. когда добавлял в функцию таджикские и азербайджанские числительные код самой функции не менялся, просто  в константы были добавлены соотв. числительные
4. потенциально (ничего не меняя в коде) можно добавить еще 3 языка, главное чтобы они использовали тот же принцип формирования числительных
Изменено: Ігор Гончаренко - 23.01.2019 17:44:34
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
у меня есть функция Пропис (публиковалась тут)
Извините, но ссылок нет (может модераторы свой сайт охраняют, а может вы её забыли вставить).
Добавьте пожалуйста ссылку, или прикрепите к комментарию свое творение (или и то и другое).  :)
А то описанная вами функция довольно крутая. И думаю многим еще пригодится.
 
illianull, по всей видимости,Ігор Гончаренко, намекает, что эта функция платная.
Да я бы не раздавал ее бесплатно - наверняка на нее потрачен не один день.
 
Михаил Витальевич С., ну пока Ігор Гончаренко, не покажет ссылку мы не узнаем об этом наверняка.
 
см. вложение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Свою тоже тут неоднократно выкладывал.
Принимает, в качестве параметров, тип валюты (RUB(по умолчанию), USD, EUR, AMD (ден.единица Армении)) и возможность преобразование в слова дробной части числа (1/0 (по умолчанию)). На русском языке. Есть вариант в виде надстройки с установщиком
Согласие есть продукт при полном непротивлении сторон
 
Спасибо вам, что поделились своими трудами. На досуге просмотрю что да как у вас устроено в логике ваших решений.
И постараюсь сделать ссылки на облачные хранилища со всеми собранными в этой теме материалами, чтоб не терялись труды (мало ли).  
 
Простите, что пропал. Скачал все примерчики, расковырял и даже сверял кто быстрее работает. Но итогами своих наблюдений так и не поделился. И честно говоря уже подзабыл какой вариант быстрее работал (поковырял файлик Сравнение СуммПрописью и вспомнил). Ігор Гончаренко привел (ПрописПримеры.xlsm) самый медленный код, но самый крутой для быстрой подмены языка.
На основе всего увиденного разработал свой вариант. Он оказался самым быстрым (где-то в 100 раз быстрее кода Игоря и в 30 раз быстрее самого быстрого, найденного мной аналога). В то же время мой код не так уж сложен в доработке. Но он заточен только под 1 язык. Переточить под другой язык, похожий на русский и украинский - дело полу часа (я вообще за 5 минут это сделаю).
Делюсь своими наработками в файле СуммаПрописьюОтИН
Файл Сравнение СуммПрописью - показывает как я сравнивал скорость работы алгоритмов. Но объяснять что там я не буду - сами разбирайтесь, кому интересно. Буду рад если кто-то проведет свой тест скорости отрабатывания моего алгоритма в сравнении с другими. А то в 30-100 раз быстрее остальных - я и сам себе не верю. При том там нет чего-то сверх сложного.
Изменено: illianull - 27.10.2020 17:35:21
 
Цитата
illianull написал:
где-то в 100 раз быстрее кода Игоря
как меряли? Куча цифирок а методология не прослеживается.
Цитата
illianull написал:
Переточить под другой язык, похожий на русский и украинский - дело полу часа (я вообще за 5 минут это сделаю
ну я б так не горячился, язык это еще не всё.
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=129782&TITLE_SEO=129782-summa-propisyu-vba-dlya-unicode&MID=1064876#message1064876
Изменено: БМВ - 27.10.2020 18:04:51
По вопросам из тем форума, личку не читаю.
 
напомню, особенности моей пропись
знает числительные на украинском, русском, таджикском и казахском языках
при добавлении каждого нового языка добавлялись только названия числительных на этом языке (2-3 строки, раздувалась в размерах константа с числительными) при этом НИКАК не менялся алгоритм
кроме того пропись используется для прописи количества предметов в доверенностях и может прописывать что угодно: слонов, бутылки, ведра
когда 1 предмет будет написан как
Один слон
Одна бутылка
Одно ведро
а 2 как
Два слона
Две бутылки
Два ведра
и т.д.... может корректно перечислить программистов
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
БМВ написал:
я б так не горячился
А я и не горячусю.  :)
Я делюсь и жду обоснованной критики. Спасибо за ваш пример. Я правильно понял, что в вашем примере решен вопрос когда у иностранцев иероглифы вместо букв?
 
Ігор Гончаренко, ваш код - швейцарский нож (конечно не для всех языков, а для украинско- и русскоподобных). И главная фича кода - добавление этих языков за пол минуты. Может я недостаточно явно это описал. Стоит также отметить, что эта функция обычно используется 1-3 раза на весь лист (в основном для составления счетов на оплату, по крайней мере так в моей конторе). Поэтому мултитул (пусть даже более медленный) будет предпочтительней - разница в наносекунды не заметна, а вот недостаток функционала серьезно напрягает (например не хватает языка).
Мой код ради спортивного интереса - проверить как сделать то-же с меньшими затратами ресурсов ПК. А в итоге, если можно будет всунуть те же фичи за меньшие "деньги" - то такой вариант будет предпочтительней.
Изменено: illianull - 28.10.2020 08:32:46
 
Дев'ятсот
кажись Дев'ятьсот
Изменено: Геннадий - 28.10.2020 08:35:19
 
Цитата
Геннадий написал:
Не Дев'ятсота Дев'ятьсот
Проверяйте, пожалуйста, свои предположения в словарях. Вики пишет "дев'ятсот". А где вы нашли свой вариант?
Изменено: illianull - 28.10.2020 08:39:52
 
Цитата
illianull написал:
иероглифы вместо букв
скорее вопросительные знаки, которыми  заменятся все непонятные для них кириллические символы и прочие символы им непонятные.
По критике -  ну если уж опеделили глобально массив, то инициализацию его (наполнение) делать идеально отдельной функцией и с проверкой, а нужно ли прописывать снова значения, если они уже там.
Изменено: БМВ - 28.10.2020 08:52:15
По вопросам из тем форума, личку не читаю.
 
БМВ, да-да. А я уже и забыл про этот косяк. В идеале я хотел вообще через Const сделать. Но не смог. И примеров не нашел. Подскажите, как исправить, или где найти пример, в котором задается константный массив.
 
Цитата
illianull написал:
и в 30 раз быстрее самого быстрого, найденного мной аналога
Протестировал на скорость свою сумму прописью MSumPropUkr из ранее предоставленной ссылки, про 30 раз не увидел, разница на 20-30%
При этом в своем коде не делал упор на скорость, больше старался сделать его лаконичным (20 десятка строк всего)
Тестировал следующим кодом (исключил все лишние операции с ячейками, оставил только сам расчет на 100 тыс. запусков функции):
Код
Sub test()
    Const m = 100000, r = 999999999999#
    Dim i As Long, n As Double, t As Double
    
    n = Int(Rnd * r * 100) / 100
    Debug.Print n
    
    t = Timer
    For i = 1 To m
        СуммаПрописьюОтИН n
    Next i
    Debug.Print Timer - t
    
    t = Timer
    For i = 1 To m
        MSumPropUkr n
    Next i
    Debug.Print Timer - t
End Sub
Изменено: MCH - 28.10.2020 14:22:22
 
Цитата
MCH написал:
разница на 20-30%
Огромнейшее спасибо! Я не гуру, поэтому и не знаю как точнее определить разницу скорости. Да и сравнивать скорости отрабатывания в екселе вообще не представляю как. Насколько я помню то принцип был - составить число из столбца A и записать время за которое была проведена операция. Потом посчитать среднее. Косяк который я подметил - это 0 времени в некоторых случаях (наверное просто ескель так округлил значение). Поэтому и попросил перепроверить того кто больше в этом шарит.
P.s. отключал все шевеления екселя, потому что время затрачиваемое на заполнение ячейки данными было в разы больше чем время затрачиваемое на выполнение функции. Что в очередной раз показывает, что интерес быстродействия - чисто спортивный.
 
Цитата
illianull написал:
у иностранцев иероглифы вместо букв
Почитайте здесь. У Михаила (БМВ)  в коде нет литералов, содержащих русские буквы.
Владимир
 
Цитата
БМВ написал:
как меряли? Куча цифирок а методология не прослеживается.
Цитата
illianull написал:
Да и сравнивать скорости отрабатывания в екселе вообще не представляю как
:D
Цитата
illianull написал:
Что в очередной раз показывает, что интерес быстродействия - чисто спортивный.
как раз нет. Если есть возможность без ущерба функциональности сделать быстрее, то это снижает нагрузку на процессор. Что отразится на потреблении эл. и тепловыделении. не важно, на сколько. но если все так будут подходить, то результат будет заметен.


Цитата
MCH написал:
про 30 раз не увидел, разница на 20-30%
У Вас железо под Ваш код оптимизировано :-)
По вопросам из тем форума, личку не читаю.
 
К сожалению уперся в невозможность инициализировать массив значениями при подгрузке модуля. Поэтому накостылял как мог.
P.s. функционал добавлен из-за просьбы в личку (вывод рублей и гривен в полном и коротком варианте). Удаление из кода литералов, содержащих русские буквы в планах. Но вы меня знаете - я могу опять на пол года пропасть.  :)  
 
Цитата
illianull написал:
Но вы меня знаете
кто это?
По вопросам из тем форума, личку не читаю.
 
Цитата
illianull написал:
Но вы меня знаете
нет, я вас не знаю
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
MCH написал:
Протестировал на скорость свою сумму прописью MSumPropUkr
Если в этой функции переменные для массивов dec, sot, ... описать как Static и присваивать при первом вызове, то в примере #21 время выполнения уменьшается почти в 2 раза и функция MSumPropUkr получает первый приз.  :)  
Владимир
 
Цитата
БМВ написал:
кто это?
Цитата
Ігор Гончаренко написал:
нет, я вас не знаю
э-э-эх шутники-флудеры :)
Ну ладно БМВ меня не знает, но Игорь вам то не стыдно? Уже 10 месяцев знакомы.
 
Цитата
sokol92 написал:
MSumPropUkr получает первый приз.  
Я не уследил о каком примере вы говорите. Поделитесь, пожалуйста, кодом. Чтобы не изобретать велосипед из костылей. А то я могу. И не говорите что вы меня не знаете  :D  
Изменено: illianull - 29.10.2020 00:18:15
Страницы: 1 2 След.
Наверх