[oodisc] Number in words

Alexej Kryukov akrioukov на newmail.ru
Пн Окт 6 15:28:49 MSD 2003


On Monday 06 October 2003 15:03, Vladimir Bukhal wrote:
> Добрый день.
>
> Это не глюк. Просто в функции используются целые значения. Возникает
> переполнение. Мой подход- работать с целыми числами только на
> завершающем этапе.

Не понял, какая разница, округлять или не округлять?

Sub Main
 Dim a As Double
 Dim b As Double
	
 a = 999999999
 b = 9999999999

 MsgBox a Mod 9 ' Работает
 MsgBox b Mod 9 ' Ошибка переполнения

End Sub

Так почему функция Mod не может обрабатывать числа больше
чем 21474835,99 ?

> kopeiki = Int((numb-Int(numb)+0.001)* 100)
> 0.001-поправка, полученная эмпирическим путем. :(( Округляет таки
> криво. :(

Знаете, уж лучше использовать Mod, чем писать эдакие
формулы. В них же потом никто, кроме автора, не разберется.

> Я полагаю, что имеет смысл использовать Ваш метод GetNumeral, чтобы
> не хранить обозначения чисел в массиве.
> В то же время, использование массивов form() и female() легче
> адаптируется к нуждам параметризации вывода.

Вот с этим не согласен. Во-первых, надо было их хоть многомерными
сделать. Или вообще оформить как структуры (хотя со структурами
в Star Basic, в отличие от VBA, по-моему, плохо). Потому что
нет ничего хуже, чем держать структурированные данные в
неструктурированной форме.

Во-вторых, следует избегать использования глобальных переменных
Единственный случай, где в Visual Basic без этого нельзя обойтись
(по крайней мере, я не знаю, как) -- это при работе с диалогами.

В-третьих, мой вариант гораздо легче читается и позволяет с меньшими
сложностями добавлять миллиарды, доллары, условные единицы,
38 попугаев и т. д. 

В-четвертых, в случае, если таких слов будет очень много,
следует вообще подумать о выносе их в отдельные файлы (откуда,
опять-таки, получать с помощью функции). Так что мой метод еще
и универсальнее на случай будущих изменений.





Подробная информация о списке рассылки Oo-discuss