Num2Words. Преобразование чисел в текст

Функция преобразования числовых значений в текст имеет общий вид.

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

Прислал Игорь Шичко.

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

59 − = 52