Функция преобразования числовых значений в текст имеет общий вид.
Num2Words(number)
Текст функции:
Substitute("_" & Trim(
Case(GetAsNumber(Number) >= 10^8;
Choose(Left(Right(Int(Number); 9); 1); ""; "сто"; "двести"; "триста"; "четыреста"; "пятьсот"; "шестьсот"; "семьсот"; "восемьсот"; "девятьсот"))
& Case(
GetAsNumber(Number) >= 10^7 and Left(Right(Int(Number); 8); 1) = 1 and GetAsNumber(Left(Right(Int(Number); 7); 1)) > 0;
Choose(Left(Right(Int(Number); 7); 1); ""; " один"; " две"; " три"; " четыр"; " пят"; " шест"; " сем"; " восем"; " девят") & "надцать миллионов";
GetAsNumber(Number) >= 10^7;
Choose(Left(Right(Int(Number); 8); 1); ""; " десять"; " двадцать"; " тридцать"; " сорок"; " пятьдесят"; " шестьдесят"; " семьдесят"; " восемьдесят"; " девяносто") &
Choose(Left(Right(Int(Number); 7); 1); ""; " один"; " два"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
" миллион" & Choose(Left(Right(Int(Number); 7); 1); "ов"; ""; "а"; "а"; "а"; "ов"; "ов"; "ов"; "ов"; "ов");
GetAsNumber(Number) >= 10^6;
Choose(Left(Right(Int(Number); 7); 1); ""; " один"; " два"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
" миллион" & Choose(Left(Right(Int(Number); 7); 1); "ов"; ""; "а"; "а"; "а"; "ов"; "ов"; "ов"; "ов"; "ов")
)
& Case(GetAsNumber(Number) >= 10^5;
Choose(Left(Right(Int(Number); 6); 1); ""; " сто"; " двести"; " триста"; " четыреста"; " пятьсот"; " шестьсот"; " семьсот"; " восемьсот"; " девятьсот"))
& Case(
GetAsNumber(Number) >= 10^4 and Left(Right(Int(Number); 5); 1) = 1 and GetAsNumber(Left(Right(Int(Number); 4); 1)) > 0;
Choose(Left(Right(Int(Number); 4); 1); ""; " один"; " две"; " три"; " четыр"; " пят"; " шест"; " сем"; " восем"; " девят") & "надцать тысяч";
GetAsNumber(Number) >= 10^4;
Choose(Left(Right(Int(Number); 5); 1); ""; " десять"; " двадцать"; " тридцать"; " сорок"; " пятьдесят"; " шестьдесят"; " семьдесят"; " восемьдесят"; " девяносто") &
Choose(Left(Right(Int(Number); 4); 1); ""; " одна"; " две"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
Case(Left(Right(Int(Number); 6); 3); " тысяч" & Choose(Left(Right(Int(Number); 4); 1); ""; "а"; "и"; "и"; "и"));
GetAsNumber(Number) >= 10^3;
Choose(Left(Right(Int(Number); 4); 1); ""; " одна"; " две"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
" тысяч" & Choose(Left(Right(Int(Number); 4); 1); ""; "а"; "и"; "и"; "и")
)
& Case(GetAsNumber(Number) >= 10^2;
Choose(Left(Right(Int(Number); 3); 1); ""; " сто"; " двести"; " триста"; " четыреста"; " пятьсот"; " шестьсот"; " семьсот"; " восемьсот"; " девятьсот"))
& Case(
GetAsNumber(Number) >= 10^1 and Left(Right(Int(Number); 2); 1) = 1 and GetAsNumber(Left(Right(Int(Number); 1); 1)) > 0;
Choose(Left(Right(Int(Number); 1); 1); ""; " один"; " две"; " три"; " четыр"; " пят"; " шест"; " сем"; " восем"; " девят") & "надцать рублей";
GetAsNumber(Number) >= 10^1;
Choose(Left(Right(Int(Number); 2); 1); ""; " десять"; " двадцать"; " тридцать"; " сорок"; " пятьдесят"; " шестьдесят"; " семьдесят"; " восемьдесят"; " девяносто") &
Choose(Left(Right(Int(Number); 1); 1); ""; " один"; " два"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
" рубл" & Choose(Left(Right(Int(Number); 1); 1); "ей"; "ь"; "я"; "я"; "я"; "ей"; "ей"; "ей"; "ей"; "ей");
GetAsNumber(Number) >= 10^0;
Choose(Left(Right(Int(Number); 1); 1); ""; " один"; " два"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
" рубл" & Choose(Left(Right(Int(Number); 1); 1); "ей"; "ь"; "я"; "я"; "я"; "ей"; "ей"; "ей"; "ей"; "ей");
"ноль рублей"));
["_в"; "В"]; ["_д"; "Д"]; ["_н"; "Н"]; ["_о"; "О"]; ["_п"; "П"]; ["_с"; "С"]; ["_т"; "Т"]; ["_ч"; "Ч"]; ["_ш"; "Ш"])
& " " & Middle(GetAsNumber(GetAsNumber(Number) & 1/1000); Position(GetAsNumber(GetAsNumber(Number) & 1/1000); Left(1/10; 1); 1; 1) + 1; 2) & " коп."
На основе данного шаблона функции разработчик может разработать любую функцию преобразования чисел в текст. Например, функция преобразования количества недель в текст будет выглядеть так:
Num2Words_weeks(number)
Substitute("_" & Trim(
Case(
GetAsNumber(Number) >= 10^1 and Left(Right(Int(Number); 2); 1) = 1 and GetAsNumber(Left(Right(Int(Number); 1); 1)) > 0;
Choose(Left(Right(Int(Number); 1); 1); ""; " одна"; " две"; " три"; " четыр"; " пят"; " шест"; " сем"; " восем"; " девят") & "надцать) недель";
GetAsNumber(Number) >= 10^1;
Choose(Left(Right(Int(Number); 2); 1); ""; " десять"; " двадцать"; " тридцать"; " сорок"; " пятьдесят"; " шестьдесят"; " семьдесят"; " восемьдесят"; " девяносто") &
Choose(Left(Right(Int(Number); 1); 1); ""; " одна"; " два"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
") " & Choose(Left(Right(Int(Number); 1); 1); "недель"; "неделя"; "недели"; "недели"; "недели"; "недель"; "недель"; "недель"; "недель"; "недель");
GetAsNumber(Number) >= 10^0;
Choose(Left(Right(Int(Number); 1); 1); ""; " одна"; " два"; " три"; " четыре"; " пять"; " шесть"; " семь"; " восемь"; " девять") &
") " & Choose(Left(Right(Int(Number); 1); 1); "недель"; "неделя"; "недели"; "недели"; "недели"; "недель"; "недель"; "недель"; "недель"; "недель");
"ноль) недель"));
["_в"; "В"]; ["_д"; "Д"]; ["_н"; "Н"]; ["_о"; "О"]; ["_п"; "П"]; ["_с"; "С"]; ["_т"; "Т"]; ["_ч"; "Ч"]; ["_ш"; "Ш"])
Автор функции неизвестен, основной источник информации Русскоязычный форум FileMaker
Прислал Игорь Шичко.
