FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9145
Вход
Перевод денежной суммы из числа в слова

Перевод денежной суммы из числового представления в слова. Сумма может содержать до 15 разрядов в целой части и до 18 разрядов в дробной. Возможно округление результата.


 
Прислал: Владимир Максимов   Категория: Интерфейс


Перевод денежной суммы из числа в слова

Несколько слов о том, почему я вообще решил выложить это решение. Вроде бы большое количество примеров на эту тему есть в разделе "Нетривиальные задачи", да и здесь есть решение Михаила Дунькина - "propis".

Вот поначалу и я так подумал. Но оказалось, что в разделе "Нетривиальные задача" к этому решению предъявлялось ряд специфических требований выполнение которых делало код практически нечитаемым. Мне потребовалось почти полдня чтобы разобраться в логике всех представленных там решений. А если добавить к этому, что в представленных решения слова "рубли" и "копейки" вообще не фигурируют, то использование их "в чистом виде" становится крайне затруднительным.

Вот поэтому, я и решил взяв кое-какие полезные идеи из предоставленных решений довести их до стадии "рублей" и "копеек".

Получившийся код не есть идеал с точки зрения эффективности или производительности. Моя задача была сделать его достаточно простым и максимально понятным с тем, чтобы любой пользователь мог с легкостью адаптировать предлагаемый код под свою задачу затратив минимальные усилия. Надеюсь, это мне удалось.


 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (5.075) Вложение [3.03]kb
Дополнения пользователей
Перевод денежной суммы из числа в слова
[+][?]
dvz
11.07.02 12:24:33

Заинтересовался проблемой.
Всегда преобразовывал, как говорили бухгалтеры (например для долларов - пропись долларов nn/100
центов).
Так вот - ни в инете, ни в консультанте+ не нашел каких либо инструкций по заполнению поля "сумма
прописью" в документах, где это поле используется. Единственно, где нашел - в "ПОЛОЖЕНИЕ О
БЕЗНАЛИЧНЫХ РАСЧЕТАХ В РОССИЙСКОЙ ФЕДЕРАЦИИ" от 12 апреля 2001 г. N 2-П ЦБ РФ - в платежных
поручениях и др. банковских док-тах.
Я это к чему?
Хотелось бы иметь универсальную программу перевода числа в слова (применения, кроме как в
финансовых документах, я ей не вижу), т.е.
1. кроме рублей использовать другие валюты (видимо достаточно доллары, евро и гривны :) );
2. предусмотреть разные варианты написания "копеек" -
   например: 2 копейки, две копейки, 02/100 коп. ets;
3. когда-то пришлось написать это для английского языка -
так-что можно cделать и "несколькоязычный" вариант :).
 
Вот собственно и все мысли по поводу.
С уважением, Захаров Д.
ЗЫ У меня примерно 6-8 практически одинаковых прог. (алгоритм-то один) на "все" случаи :((( - все
руки не доходят...
Владимир Максимов
11.07.02 13:01:05

Ну, вообще-то, предложенный мной вариант предусматривает 2 варианта написания "копеек": в виде
числа и в виде слов. Думаю, добавить другие варианты будет также не сложно.

Подправить для других видов валют тоже не вижу проблем. Всего-то и надо сделать замену 8 элементов
массива. Можно организовать эту замену по соотвествующему параметру.
Денис В. Степанов
07.08.02 12:10:21

вот только что скачал. Еще даже не пускал, чиста посмотрел код. Знаешь, что хочется сказать - та
же Propis - она работает, но стиль написания... Не хотелось ничего вставлять в проекты то, что
надыбил (а свою прогу похерил куда-то) А вот твоюююю! :) Это тебе не лесть, как к уважаемому мной
челу. Это просто еще и призыв другим разработчикам - скачайте вариант и посмотрите - _как_ нужно
грамотно и красиво оформлять свой код! Не бойтесь добавить пАру букв в префикс, табуляции и стиль
написания команд!! Красиво вобщем и достойно для любого проекта!

Денис В. Степанов
07.08.02 15:50:29

Вс:е-таки у себя на месте решил подписать вторым параметром tlProper, со смещением остальных. Он
как раз в конце проги перевовить (если .Т.) в заглавную букву. Фишка оказалась нужна в рапорте
счета не предоплату. И чтоб не плодить переменных извне - перекинул рекомендуемую тобой замену в
самой ф-ции. Так что если есть возможноть править твое решение - IMHO лучше так и сделать
Владимир Максимов
12.08.02 10:45:46

Исправил. Теперь по умолчанию результирующая строка начинается с заглавной буквы. И добавлен
соответсвующий параметр, регулирующий этот факт.

Хотя, идея решения заключалась как раз в том, чтобы пользователи сами адаптировали его под свои
нужды.
Денис В. Степанов
12.08.02 15:42:33

Решение - грамотное! Зато что теперь нариканий - 0! Грамотно сделано и функциональность полная!
Сидоренко Вячеслав
27.08.04 13:12:17

Необходимо было это программулину прикрутить к евро и долларом, немного модифицировал и получилось
очень удачное решение :)

* Добавил еще один параметр nTypeOfValuta

* nTypeOfValuta - 	1- Российские рубли (по умолчанию)
*				2- Доллары
*				3- Евро

FUNCTION Money2Str
LPARAMETERS yMoney, nRound, IsWord, AllLower, nTypeOfValuta

 .......

* Уточняю значение используемого типа валюты, по умолчанию рубли
IF TYPE("nTypeOfValuta")<>"N" OR Between(nTypeOfValuta,1,3)=.F.
	nTypeOfValuta=1
ENDIF
......

* Изменил Массив "размерностей"
.......
DO CASE 
	CASE nTypeOfValuta=1
		paDimensions[5,1]=' один рубль'
		paDimensions[5,2]=' два рубля'
		paDimensions[5,3]=' рубля'
		paDimensions[5,4]=' рублей'

		paDimensions[6,1]=' одна копейка'
		paDimensions[6,2]=' две копейки'
		paDimensions[6,3]=' копейки'
		paDimensions[6,4]=' копеек'
	CASE nTypeOfValuta=2
		paDimensions[5,1]=' один доллар'
		paDimensions[5,2]=' два доллара'
		paDimensions[5,3]=' доллара'
		paDimensions[5,4]=' долларов'

		paDimensions[6,1]=' один цент'
		paDimensions[6,2]=' два цента'
		paDimensions[6,3]=' цента'
		paDimensions[6,4]=' центов'

	CASE nTypeOfValuta=3
		paDimensions[5,1]=' евро'
		paDimensions[5,2]=' евро'
		paDimensions[5,3]=' евро'
		paDimensions[5,4]=' евро'

		paDimensions[6,1]=' один цент'
		paDimensions[6,2]=' два цента'
		paDimensions[6,3]=' цента'
		paDimensions[6,4]=' центов'

ENDCASE

* Массив "единиц"
........
Lapizkaj
22.09.07 18:18:06

Замечательная программа и полностью готовая к применению, и мне очень помогла в быстром решении
поставленной передо мной задаче. Спасибо!
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика