Как реализовать переход из числа в написание??? т.е. если в базе 0, то должно быть написано Ноль или 21 - двадцать один
Создай массив, что-то типа 0 => ноль 1 => один И потом заюзай str_replace.... Или что-то типа того. По такому же принципу, как происходит переконвертирование символов одной кодировки в другую. Только можно вопрос - нахрена?
Для создания договоров... ))) Там прописываются и числа и прописью это же число... ИМХО не рационально ) И как ты будешь таким методом заполнять 158 тысяц, а???? Может есть готовые функции?
я тоже сначала об этом подумал, но что-то запутался... ведь еще надо сделать двадцать две(два) Сумма платежа: 21 000 (двадцать одна тысяца) Всего Вы должно 21 000 (двадцать одну тусячу)
двадцать один тысяча тоже норм =)) а вообще тут надо спросить у тех кто русский хорошо знает, когда как нужно говорить, а потом всё это на пхп перевести
Тогда упростили задачу )) И все же я не понимаю алгоритм (( ленграш от суммы, с конца разбиваем на разряды, а дальше? (
Горбунов Олег, а чем они тебя не устраивают? Можешь переписать ))) UP Правда я очень не люблю ООП в принципе, но это другая история
Ну нах. Меня тоже. Прое...ся с реализацией функций пиаровских ssh2_connect.. вот уж ты правильно выразился
народ в Excel есть модуль Money() написанный на Visual Basic он делает то что нам надо с числом его можно заюзать и как это сделать ? вот код: Код (Text): Const gnMale = 0 Const gnFemale = 1 Const gnMiddle = 2 Function Money(MoneyString As String) Dim rub As Long Dim kop As Integer Separate MoneyString, rub, kop Dim s As String If rub = 0 And kop = 0 Then Money = "——" Exit Function End If s = MakeUnitString(rub, gnMale, "рубль", "рубля", "рублей", "ноль рублей") & " " & _ MakeUnitString(kop, gnFemale, "копейка", "копейки", "копеек", "00 копеек") s = Trim$(s) s = UCase(Left$(s, 1)) & Right$(s, Len(s) - 1) Money = s End Function Private Function Separate(ByVal MoneyString As String, rub As Long, kop As Integer) Const delim = ",.-=" Dim i As Integer Dim j As Integer For i = 1 To Len(delim) j = InStr(MoneyString, Mid$(delim, i, 1)) If j > 0 Then Exit For Next If j > 0 Then rub = Val(Left$(MoneyString, j - 1)) Dim z As String z = Right$(MoneyString, Len(MoneyString) - j) If Len(z) = 1 Then z = z & "0" kop = Val(z) Else rub = Val(MoneyString) End If End Function Private Function MakeUnitString(ByVal num As Long, ByVal gender As Integer, ByVal one As String, ByVal two As String, ByVal ten As String, Optional NullString As String) As String Dim s As String If num = 0 Then MakeUnitString = NullString Exit Function End If s = MakeUnitHundred(num Mod 1000, gender, one, two, ten) num = num \ 1000 If num <> 0 Then s = MakeUnitHundred(num Mod 1000, gnFemale, "тысяча", "тысячи", "тысяч") & " " & s num = num \ 1000 If num <> 0 Then s = MakeUnitHundred(num Mod 1000, gnMale, "миллион", "миллиона", "миллионоа") & " " & s End If End If MakeUnitString = s End Function Function MakeUnitHundred(ByVal num As Long, ByVal gender As Integer, Optional ByVal one As String, Optional ByVal two As String, Optional ByVal ten As String) As String num = num Mod 1000 MakeUnitHundred = Hundreds(num) & Decims(num, gender, one, two, ten) End Function Private Function Hundreds(ByVal num As Long) Dim a(0 To 9) As String a(0) = "" a(1) = "сто " a(2) = "двести " a(3) = "триста " a(4) = "четыреста " a(5) = "пятьсот " a(6) = "шетьсот " a(7) = "семьсот " a(8) = "восемьсот " a(9) = "девятьсот " Hundreds = a(num \ 100) End Function Private Function Decims(ByVal num As Long, gender As Integer, Optional ByVal one As String, Optional ByVal two As String, Optional ByVal ten As String) Dim s As String s = SecondDecims(num) If s = "" Then Dim a(0 To 9) As String a(0) = "" a(1) = "" a(2) = "двадцать " a(3) = "тридцать " a(4) = "сорок " a(5) = "пятьдесят " a(6) = "шестьдесят " a(7) = "семьдесят " a(8) = "восемьдесят " a(9) = "девяносто " s = a((num \ 10) Mod 10) & Digits(num, gender, one, two, ten) Else s = s & ten End If Decims = s End Function Private Function SecondDecims(ByVal num As Long) As String num = num Mod 100 - 10 Dim a(0 To 9) As String If num > 9 Or num < 0 Then SecondDecims = "" Else a(0) = "десять " a(1) = "одиннадцать " a(2) = "двенадцать " a(3) = "тринадцать " a(4) = "четырнадцать " a(5) = "пятнадцать " a(6) = "шестнадцать " a(7) = "семнадцать " a(8) = "восемнадцать " a(9) = "девятнадцать " SecondDecims = a(num) End If End Function Private Function Digits(ByVal num As Long, gender As Integer, Optional ByVal one As String, Optional ByVal two As String, Optional ByVal ten As String) Dim a(0 To 9, 0 To 2) As String num = num Mod 10 If num = 0 Then Digits = ten Else a(1, 0) = "один ": a(1, 1) = "одна ": a(1, 2) = "одно ": a(2, 0) = "два ": a(2, 1) = "две ": a(2, 2) = "два ": a(3, 0) = "три ": a(3, 1) = "три ": a(3, 2) = "три ": a(4, 0) = "четыре ": a(4, 1) = "четыре ": a(4, 2) = "четыре ": a(5, 0) = "пять ": a(5, 1) = "пять ": a(5, 2) = "пять ": a(6, 0) = "шесть ": a(6, 1) = "шесть ": a(6, 2) = "шесть ": a(7, 0) = "семь ": a(7, 1) = "семь ": a(7, 2) = "семь ": a(8, 0) = "восемь ": a(8, 1) = "восемь ": a(8, 2) = "восемь ": a(9, 0) = "девять ": a(9, 1) = "девять ": a(9, 2) = "девять ": Select Case num Case 1 Digits = a(num, gender) & one Case 2, 3, 4 Digits = a(num, gender) & two Case Else Digits = a(num, gender) & ten End Select End If End Function Function NDS1(ByVal m As String) As String On Error GoTo errr Dim m1 As String Dim m2 As String m = Format(m, "0.00") m1 = Format(m / 1.18, "0.00") m2 = m - m1 NDS1 = RubKop(m2) ex: Exit Function errr: NDS1 = "—" Resume ex End Function Function NDS(ByVal m) As String If m = 0 Then NDS = "—" Exit Function End If On Error GoTo errr Dim rub As Long, kop As Integer Dim m1 As String, rub1 As Long, kop1 As Integer Dim m2 As String, rub2 As Long, kop2 As Integer m = Format(m, "0.00") m1 = Format(m / 1.18, "0.00") 'm = Format(m, "##") 'm1 = Format(m / 1.2, "##") m2 = m - m1 Separate m, rub, kop Separate m1, rub1, kop1 Separate m2, rub2, kop2 NDS = rub & "-" & Format(kop, "00") & "(" & rub1 & "-" & Format(kop1, "00") & " + ??? 18% - " & rub2 & "-" & Format(kop2, "00") & ")" ex: Exit Function errr: NDS = "—" Resume ex End Function Function RubKop1(ByVal m, ByVal m1) As String On Error GoTo errr RubKop1 = RubKop(m / m1) ex: Exit Function errr: RubKop1 = "—" Resume ex End Function Function RubKop(ByVal m) As String If m = 0 Then RubKop = "—" Exit Function End If Dim rub As Long, kop As Integer m = Format(m, "0.00") Separate m, rub, kop RubKop = rub & "-" & Format(kop, "00") End Function Function EM(s) As String If IsEmpty(s) Then EM = "" Else EM = s End If End Function