|
#1
|
|||
|
|||
сумма прописью
Уважаемые посетители форума
-------------------------------------- Я несколько раз натыкался на форуме на запросы как перевести число в словесное выражение И это сподвигло меня на написание такой функции Проверял, багов вроде нет... Понимает числа до 999 миллионов Если надо больше- пусть Кудрин дает заказ- сделаю миллиарды. Может кому- то пригодится.... Код:
{------------------------------------------------------------------------------- возвращает числительное прописью --------------------------------------------------------------------------------} function GetNumeralStr(Num:dword):string; const ss0:array[0..19] of string[50]=('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять','десять','одиннадцать','двенадцать','тринадцать', 'четырнадцать','пятнадцать','шестнадцать','семнадцать', 'восемнадцать','девятнадцать'); ss10:array[0..9] of string[50]=('','','двадцать','тридцать','сорок','пятьдесят','шестьдесят', 'семьдесят','восемьдесят','девяносто'); ss100:array[0..9] of string[50]=('','сто','двести','триста','четыреста', 'пятьсот','щестьсот','семьсот','восемьсот','девятьсот'); ss1000:array[0..19] of string[50]=('тысяч','одна тысяча','две тысячи','три тысячи', 'четыре тысячи','пять тысяч','шесть тысяч','семь тысяч', 'восемь тысяч','девять тысяч','десять тысяч', 'одиннадцать тысяч','двенадцать тысяч','тринадцать тысяч', 'четырнадцать тысяч','пятнадцать тысяч', 'шестнадцать тысяч','семнадцать тысяч', 'восемнадцать тысяч','девятнадцать тысяч'); ssM:array[0..19] of string[50]=('миллионов','один миллион','два миллиона','три миллиона', 'четыре миллиона','пять миллионов','шесть миллионов','семь миллионов', 'восемь миллионов','девять миллионов','десять миллионов', 'одиннадцать миллионов','двенадцать миллионов','тринадцать миллионов', 'четырнадцать миллионов','пятнадцать миллионов', 'шестнадцать миллионов','семнадцать миллионов', 'восемнадцать миллионов','девятнадцать миллионов'); var Remaind:dword; begin Result:=''; //единицы Remaind:=Num mod 100; if Remaind <=19 then Result:=ss0[Remaind] else Result:=ss10[Remaind div 10]+' '+ss0[Remaind mod 10]; Num:=Num div 100; Result:=ss100[Num mod 10]+' '+Result; Num:=Num div 10; //тысячи Remaind:=Num mod 100; if Num mod 1000 > 0 then if Remaind <= 19 then Result:=ss1000[Remaind]+' '+Result else Result:=ss10[Remaind div 10]+' '+ss1000[Remaind mod 10]+' '+Result; Num:=Num div 100; Result:=ss100[Num mod 10]+' '+Result; Num:=Num div 10; //миллионы Remaind:=Num mod 100; if Num mod 1000 > 0 then if Remaind <= 19 then Result:=ssM[Remaind]+' '+Result else Result:=ss10[Remaind div 10]+' '+ssM[Remaind mod 10]+' '+Result; Num:=Num div 100; Result:=ss100[Num mod 10]+' '+Result; end; |
#2
|
||||
|
||||
Желание показать свои возможности можно только приветствовать, но результат написания данной функции, мягко говоря, неутешителен. Слегка напоминает фразу первоклассника: "Мама мыла раму", также приелась и также бесполезна.
|
#3
|
||||
|
||||
Цитата:
Ну и чем же он неутешителен?? |
#4
|
||||
|
||||
Дублирование слов в стрингах, как вариант пойдёт.
|
#5
|
||||
|
||||
Отформатируй в удобочитаемый код.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |