Функция преобразования числовых значений в текст имеет общий вид.
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
Прислал Игорь Шичко.