[oodisc] Number in words
Alexej Kryukov
akrioukov на newmail.ru
Вт Окт 7 00:49:36 MSD 2003
On Monday 06 October 2003 22:35, Vladimir Bukhal wrote:
> Здравствуйте, Алексей.
> Засел за работу над модулем. Взял за основу ваш вариант: признаю, что
> он удачен.
> 1. В Вашей версии модуля неверно обрабатывались чисела, содержащие
> 11-14. Решается это достаточно легко: меняются местами блок "For
> numbers between 10 and 20" и "Select Case iRemainder..."
Да, конечно, это был недосмотр.
> 2.Все же имеет иначе вычислять копейки:
> iCopecks = Int((dInNum-Int(dInNum))*100+0.5)
> Теперь все абсолютно корректно.
В смысле, это на тот случай, если по результатам
вычисления будет более двух цифр после запятой?
Тогда логично. Однако я предлагаю ввести функцию
getFraction, чтобы можно было задать иное количество
цифр после запятой, если, например, у нас будут
тонны и килограммы.
> Теперь можно говорить о включении
> миллиардов.
Всё равно зашкаливает на 999999999.99. Конечно, это
логичнее, чем 21474835.99.
> 3.Новая версия функции propis в прикрепленном файле.
> Теперь она обрабатывает все выделения в таблице или текстовом
> документе и меняет числовые на их эквивалент прописью.
По Вашему варианту у меня следующие замечания:
-- много лишних переменных, и, IMHO, слишком сложно реализовано
получение выделения в таблице;
-- в текстовом документе, наверное, должна вставляться не
просто сумма прописью, а что-то вроде "X руб. Y коп. (икс
рублей Y коп.)";
-- еще раз призываю соблюдать высказанные мной пожелания
по оформлению кода. Кстати, в VB вместо конструкции
while ... wend надлежит использовать Do While ... Loop.
Часть из названного я исправил в приложенном варианте. Но
всё это меркнет перед вопросом: почему, собственно, у
нас вызывается именно n2s_ru_rru? Опять мы стоим перед
дилеммой: то ли организовать десяток пользовательских
функций, в которых потом будет трудно разобраться, то
ли делать диалог с возможностью выбора -- но этот диалог
надоест пользователю со сторого же раза, если он всегда
использует только один вариант.
> 4.Постараюсь продвинуться к большей параметризации.
> В моем варианте, это все же достигалось меньшей кровью.
> Для вашего, думаю, придется принять в отдельное рассмотрение
> iOrder=1, оставив стандартные наборы, ввести опциональные параметры
> form1 As String,form2 As String,form3 As String,
> формы слова
> bisFemale As boolean,sDr As String
Так у меня же всё это есть! Посмотрите, с какими параметрами
вызывается getCase: bGenitive As Boolean, bPlural As Boolean.
Вот этой парой параметров (Именительный/Родительный, Ед./Множ.)
описывается всё множество требуемых форм. Это же явно лучше,
чем безликие form1, form2, form3.
> род обозначение дробной части или "", если не
> требуется
Это да, это надо. Только как бы обойтись без умножения
количества пользовательских функций...
> Постараюсь предложить не очень страшное решение.
----------- УМЕДХЭБС ЮБУФШ -----------
Было удалено вложение не в текстовом формате...
Имя : SumLiterally.xba.gz
Тип : application/x-gzip
Размер : 2787 байтов
Описание: отсутствует
Url : /pipermail/oo-discuss/attachments/20031007/5503695f/SumLiterally.xba.bin
Подробная информация о списке рассылки Oo-discuss