Перевод с чисел в текст

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sQx
Философ
Философ
 
Сообщения: 365
Зарегистрирован: 08.08.2002 (Чт) 19:23

Перевод с чисел в текст

Сообщение sQx » 13.10.2003 (Пн) 19:08

Как перевести например число 10 в "десять"
или к примеру 1234 в "одна тысяча двести тридцать четыри"
Написать то легко, только может кто пример видел что себе голову не забивать..
Высшая мудрость - знать самого себя.
Ученый человек - сосуд, мудрец - источник.
Что разумно, то действительно, и что действительно, то разумно.
Знание - сила, всезнание - слабость.
Я знаю только то, что ничего не знаю.

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 13.10.2003 (Пн) 20:23

Попробуй это. Пример сделан для Access/Excel, но, я думаю, особых изменений делать не придётся :wink:
Код: Выделить всё
Function Сумма_прописью(s@) As String
Static triad(4) As Integer, numb1(0 To 19) As String, numb2(0 To 9) As String, numb3(0 To 9) As String
If s@ = 0 Then
Сумма_прописью = ""
Exit Function
End If
ss@ = s@
triad(1) = ss@ - Int(ss@ / 1000) * 1000
ss@ = Int(ss@ / 1000)
triad(2) = ss@ - Int(ss@ / 1000) * 1000
ss@ = Int(ss@ / 1000)
triad(3) = ss@ - Int(ss@ / 1000) * 1000
ss@ = Int(ss@ / 1000)
triad(4) = ss@ - Int(ss@ / 1000) * 1000
ss@ = Int(ss@ / 1000)
numb1(0) = ""
numb1(1) = "один "
numb1(2) = "два "
numb1(3) = "три "
numb1(4) = "четыре "
numb1(5) = "пять "
numb1(6) = "шесть "
numb1(7) = "семь "
numb1(8) = "восемь "
numb1(9) = "девять "
numb1(10) = "десять "
numb1(11) = "одиннадцать "
numb1(12) = "двенадцать "
numb1(13) = "тринадцать "
numb1(14) = "четырнадцать "
numb1(15) = "пятнадцать "
numb1(16) = "шестнадцать "
numb1(17) = "семнадцать "
numb1(18) = "восемнадцать "
numb1(19) = "девятнадцать "
numb2(0) = ""
numb2(1) = ""
numb2(2) = "двадцать "
numb2(3) = "тридцать "
numb2(4) = "сорок "
numb2(5) = "пятьдесят "
numb2(6) = "шестьдесят "
numb2(7) = "семьдесят "
numb2(8) = "восемьдесят "
numb2(9) = "девяносто "
numb3(0) = ""
numb3(1) = "сто "
numb3(2) = "двести "
numb3(3) = "триста "
numb3(4) = "четыреста "
numb3(5) = "пятьсот "
numb3(6) = "шестьсот "
numb3(7) = "семьсот "
numb3(8) = "восемьсот "
numb3(9) = "девятьсот "
txt$ = ""
If ss@ <> 0 Then
n% = MsgBox("Сумма выходит за границы формата", 16, "Сумма прописью")
Сумма_прописью = ""
Exit Function
End If
For i% = 4 To 1 Step -1
n% = 0
If triad(i%) > 0 Then
n% = Int(triad(i%) / 100)
txt$ = txt$ & numb3(n%)
n% = Int((triad(i%) - n% * 100) / 10)
txt$ = txt$ & numb2(n%)
If n% < 2 Then
n% = triad(i%) - (Int(triad(i%) / 10) - n%) * 10
Else
n% = triad(i%) - Int(triad(i%) / 10) * 10
End If
Select Case n%
Case 1
If i% = 2 Then txt$ = txt$ & "одна " Else txt$ = txt$ & "один "
Case 2
If i% = 2 Then txt$ = txt$ & "две " Else txt$ = txt$ & "два"
Case Else
txt$ = txt$ & numb1(n%)
End Select
Select Case i%
Case 2
If n% = 0 Or n% > 4 Then
txt$ = txt$ + "тысяч "
Else
If n% = 1 Then txt$ = txt$ + "тысяча " Else txt$ = txt$ + "тысячи "
End If
Case 3
If n% = 0 Or n% > 4 Then
txt$ = txt$ + "миллионов "
Else
If n% = 1 Then txt$ = txt$ + "миллион " Else txt$ = txt$ + "миллиона "
End If
Case 4
If n% = 0 Or n% > 4 Then
txt$ = txt$ + "миллиардов "
Else
If n% = 1 Then txt$ = txt$ + "миллиард " Else txt$ = txt$ + "миллиарда "
End If
End Select
End If
Next i%
If n% = 0 Or n% > 4 Then
txt$ = txt$ + "рублей"
Else
If n% = 1 Then txt$ = txt$ + "рубль" Else txt$ = txt$ + "рубля"
End If
txt$ = UCase$(Left$(txt$, 1)) & Mid$(txt$, 2)
Сумма_прописью = txt$
End Function
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.10.2003 (Вт) 7:38

Помнится, писал я штучку такую... Позволяет называть все числа в диапазоне +-E66... Во всех падежах и родах...
То ли в Проекты выложить?
Или не нуна?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.10.2003 (Вт) 13:40

Функция LetterSum из модуля Currency.
Есть еще ряд функций в модуле LangRU, но я не помню, насколько они доделаны.
Lasciate ogni speranza, voi ch'entrate.

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 17.10.2003 (Пт) 12:36

GSerg писал(а):Помнится, писал я штучку такую... Позволяет называть все числа в диапазоне +-E66... Во всех падежах и родах...
То ли в Проекты выложить?
Или не нуна?


Выкладывай, поделись с народом. :)

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 18.10.2003 (Сб) 19:04

по-моему в "исходниках программ" есть парочка таких... или не там.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList  
cron