[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