[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