Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Readme.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
378 Кб
Скачать
☆

5.5.Представление чисел (сумм) прописью, склонениe числительных и валют.

Данные функции, возвращают значения Integer по типовой схеме описанной в разделе 5.2 и, если не оговорено особо, своим значением передают результат выполнения операции преобразования:

0 – успешное завершение;

-1 – недопустимое значение падежа;

-2 – недопустимое значение рода;

-3 – размер буфера недостаточен для размещения результата преобразования ФИО.

5.5.1.NumberToString

function NumberToString(Quantity: Extended; iSex: integer; Decimal: Integer; RemoveZero, CnvtFrac: Boolean; pResult: PChar; var nLen: Integer): Integer;

Функция преобразования числа Quantity в его строковый эквивалент (число прописью).

Основная функция преобразования. Вызовы всех прочих функций перечисленных ва данном разделе совдятся к вызову этой функции. Например, число «231,152» будет преобразовано и возвращено как «двести тридцать один и сто пятьдесят две тысячные».

Параметры:

  • Quantity – преобразуемое число.

  • iSex – род, (-1 средний, 0 - женский, 1 - мужской род);

  • Decimal – точность в дробной части (<=15), если установлено больше чем присутсвует в числе, то остальные считаются нулями (например число «123,12» имеет 2 знака в дробной части, то установка Decimal = 3 приведет к преобразованию число «123,120»);

  • RemoveZero – если установлено - удалять незначащие нули в дробной части (например если не установлено, то 123,120 = «сто двадцать три и сто двадцать тысячных», если установлено, 123,120 = «сто двадцать три и двенадцать сотых»);

  • CnvtFrac – если установлено происходит преобразование дробной части, иначе преобразуется целая часть, а дробная выводится цифрами.

На входное число накладывает ограничения тип Extended, максимальное количество значаших цифр для которого 15. Например 123456789012345,123 будет преобразовано в «сто двадцать три триллиона четыреста пятьдесят шесть миллиардов семьсот восемьдесят девять миллионов двенадцать тысяч триста сорок пять», т.е дробная часть будет отброшена т.к. произошло превышение максимального количества значащих цифр. То же истинно и для целых чисел более «999 999 999 999 999» («девятьсот девяносто девять триллионов девятьсот девяносто девять миллиардов девятьсот девяносто девять миллионов девятьсот девяносто девять тысяч девятьсот девяносто девять»). Если произошло превышение максимального количества значимых цифр, исключения не произойдет, но вывод для чисел с большой целой частью будет приведен к номальной форме представления: 1234567890123456 («1,23456789012346E15»). А для чисел с большой дробной частью будет сокращена дробная часть: 0.1234567890123456 («ноль и двенадцать триллионов триста сорок пять миллиардов шестьсот семьдесят восемь миллионов девятьсот одна тысяча двести тридцать четыре стотриллионные»).

5.5.2.SumInWords

function SumInWords(Quantity: PChar; iSex: Integer; Decimal: Integer; RemoveZero, CnvtFrac: Boolean; pResult: PChar; var nLen: Integer): Integer;

Функция преобразования числа Quantity в его строковый эквивалент (число прописью).

Частный случай функции NumberToString (фактически перегруженная функция), реализована для обхода ограничения в 15 значащих цифр, изменен тип первого параметр Quantity на PChar. Все остальные параметры сохранены. Например «123456789123456,12345678912345» будет проебразовано в «сто двадцать три триллиона четыреста пятьдесят шесть миллиардов семьсот восемьдесят девять миллионов сто двадцать три тысячи четыреста пятьдесят шесть и двенадцать триллионов триста сорок пять миллиардов шестьсот семьдесят восемь миллионов девятьсот двенадцать тысяч триста сорок пять стотриллионных». Обратите внимание что целая и дробная часть имеют разное количество значаших цифр, 15 и 14 соотвественно. Связано это с максимальным реализованным порядком десятичных дробей – «стотриллионные».

5.5.3.DoubleToVerbal

function DoubleToVerbal(Quantity: Extended; pResult: PChar; var nLen: Integer): Integer;

Функция преобразования числа Quantity в строковый эквивалент.

Использование DoubleToVerbal сводится к вызову NumberToString со следующими значениями параметров последниих:

  • Decimal:=14;

  • RemoveZero:=True;

  • CnvtFrac:=True;

Следующие отличие состоит в том, что при преобразовании будет указаны слова «целые», «целых»: 123,46 «сто двадцать три целые и сорок шесть сотых».

5.5.1.DeclNumeral

function DeclNumeral(Value: PChar; nPadeg: Integer; iSex: Integer; Order, Soul: Boolean; pResult: PChar; var nLen: Integer): Integer;

Функция склонения строкового числительного

Параметры:

  • Value – строковое числительнoе в именительном падеже, результат использования одной из предыдущих функций NumberToString, SumInWords или DoubleToVerbal;

  • nPadeg – предуемый падеж (1..6);

  • iSex –пол (-1 – средний, 0 – женский. 1 – мужской)

  • Order – если установлено (true) порядковое иначе количественное (отсутсвие или присутсивеи дробной части соответсвенно);

  • Soul – если установлено (true) одушевленное иначе неодушевленное.

Пример преобразований «123.45»:

  • Именительный (кто/что): сто двадцать три и сорок пять сотых;

  • Родительный (кого/чего нет): ста двадцати трех и сорока пяти сотых;

  • Дательный (кому/чему дать): ста двадцати трем и сорока пяти сотым;

  • Винительный (кого/что вижу): сто двадцать три и сорок пять сотых;

  • Творительный (кем/чем горжусь): ста двадцатью тремя и сорока пятью сотыми;

  • Предложный (о ком/о чем мечтаю): ста двадцати трех и сорока пяти сотых.

5.5.2.DeclCurrency

function DeclCurrency(Quantity: Currency; CurrName: PChar; nPadeg: Integer; Forms: Byte; pResult: PChar; var nLen: Integer): Integer;

Функция склонения числового значения (Quantity) валюты (CurrName) в указанный падеж (nPadeg).

Параметры:

  • Quantity – сумма в виде числительного;

  • CurrName – код валюты по ОКВ (ISO 4217) согласно справочнику валют2;

  • nPadeg – номер падежа (1..6);

  • Forms – форма вывода (представление результата), например:

    • 0 - сто двадцать три российских рубля 32 копейки;

    • 1 - (сто двадцать три) российских рубля 32 копейки;

    • 2 - 123 (сто двадцать три) российских рубля 32 копейки.

Любая цифра отличная от приведенных представит результат как если бы был указан «0».

Согласно бухгалтерским требованиям копейки (и любые другие сотые части основной валюты) не преобразуются. Например, «123.45» даст следующие результаты склонения:

  • Именительный (кто/что): сто двадцать три российских рубля 45 копеек;

  • Родительный (кого/чего нет): ста двадцати трех российских рублей 45 копеек;

  • Дательный (кому/чему дать): ста двадцати трем российским рублям 45 копейкам;

  • Винительный (кого/что вижу): сто двадцать три российских рубля 45 копеек;

  • Творительный (кем/чем горжусь): ста двадцатью тремя российскими рублями 45 копейками;

  • Предложный (о ком/о чем мечтаю): ста двадцати трех российских рублях 45 копейках.

При выводе результата входной параметр огругляется до целых значений валюты учитывая наличие сотой части, т.е.

«2,845» выдаст результаты

  • «два российских рубля 84 копейки»;

  • «три белорусских рубля»;

  • «два доллара США 84 цента»;

  • «три турецких лиры».

Используется так называемое «Банковское округление» — округление для этого случая происходит к ближайшему чётному, то есть 2,5 → 2, 3,5 → 4.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]