За последние 24 часа нас посетили 137742 программиста и 2322 робота. Сейчас ищет 1201 программист ...

Из числа в слово...

Тема в разделе "PHP для новичков", создана пользователем EvelRus, 9 сен 2008.

  1. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Как реализовать переход из числа в написание??? т.е. если в базе 0, то должно быть написано Ноль или 21 - двадцать один
     
  2. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Создай массив, что-то типа

    0 => ноль
    1 => один

    И потом заюзай str_replace.... Или что-то типа того.

    По такому же принципу, как происходит переконвертирование символов одной кодировки в другую.

    Только можно вопрос - нахрена?
     
  3. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    А хотя,,,,, Двадцать один......
    мдя, поторопился с ответом....
    Надо будет подумать.
     
  4. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Для создания договоров... ))) Там прописываются и числа и прописью это же число...

    ИМХО не рационально ) И как ты будешь таким методом заполнять 158 тысяц, а???? :)


    Может есть готовые функции?
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    думаю надо разбить число на тыс,сотни,десятки,ед а потом уже заменять из массива
     
  6. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    я тоже сначала об этом подумал, но что-то запутался... ведь еще надо сделать двадцать две(два)

    Сумма платежа: 21 000 (двадцать одна тысяца)

    Всего Вы должно 21 000 (двадцать одну тусячу)
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    двадцать один тысяча тоже норм =))
    а вообще тут надо спросить у тех кто русский хорошо знает, когда как нужно говорить, а потом всё это на пхп перевести
     
  8. Anonymous

    Anonymous Guest

    Сумма прописью на документах не склоняется.
     
  9. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Тогда упростили задачу :)))

    И все же я не понимаю алгоритм :(((
    ленграш от суммы, с конца разбиваем на разряды, а дальше? :((
     
  10. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
  11. Anonymous

    Anonymous Guest

    Интересно, меня одного от пеаровских классов блевать тянет? )
     
  12. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Горбунов Олег, а чем они тебя не устраивают? Можешь переписать ;))))

    UP Правда я очень не люблю ООП в принципе, но это другая история
     
  13. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Горбунов Олег
    Нет, не одного тебя ))) но раз уж велосипед сделан...
     
  14. Anonymous

    Anonymous Guest

    нашел баг. кто нить его тоже найдет?
    ЗЫ. Виноват, это не баг... это «особенности реализации». гг.
     
  15. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Ну нах. Меня тоже.
    Прое...ся с реализацией функций пиаровских ssh2_connect.. вот уж ты правильно выразился
     
  16. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    хм... написать, чтоли.. :)
     
  17. Anonymous

    Anonymous Guest

    Так я ж уже написал )
     
  18. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    а я с дельфи портировал :)
    но тока споткнулся - как в PHP реализуется цикл repeat..until? :))
     
  19. Anonymous

    Anonymous Guest

    do {} while()

    но я обошелся без него, как видно )
     
  20. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Горбунов Олег
    бугога, я портировал этот же код, который был портирован в дельфи %)))))
     
  21. Anonymous

    Anonymous Guest

    ну, я зато сам написал )
     
  22. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    народ в Excel есть модуль Money() написанный на Visual Basic он делает то что нам надо с числом его можно заюзать и как это сделать ?
    вот код:
    Код (Text):
    1.  
    2. Const gnMale = 0
    3. Const gnFemale = 1
    4. Const gnMiddle = 2
    5.  
    6. Function Money(MoneyString As String)
    7.  Dim rub As Long
    8.  Dim kop As Integer
    9.  Separate MoneyString, rub, kop
    10.  Dim s As String
    11.  If rub = 0 And kop = 0 Then
    12.   Money = "——"
    13.   Exit Function
    14.  End If
    15.  s = MakeUnitString(rub, gnMale, "рубль", "рубля", "рублей", "ноль рублей") & " " & _
    16.      MakeUnitString(kop, gnFemale, "копейка", "копейки", "копеек", "00 копеек")
    17.  s = Trim$(s)
    18.  s = UCase(Left$(s, 1)) & Right$(s, Len(s) - 1)
    19.  Money = s
    20. End Function
    21. Private Function Separate(ByVal MoneyString As String, rub As Long, kop As Integer)
    22.   Const delim = ",.-="
    23.   Dim i As Integer
    24.   Dim j As Integer
    25.  
    26.   For i = 1 To Len(delim)
    27.    j = InStr(MoneyString, Mid$(delim, i, 1))
    28.    If j > 0 Then Exit For
    29.   Next
    30.  If j > 0 Then
    31.   rub = Val(Left$(MoneyString, j - 1))
    32.   Dim z As String
    33.   z = Right$(MoneyString, Len(MoneyString) - j)
    34.   If Len(z) = 1 Then z = z & "0"
    35.   kop = Val(z)
    36.  Else
    37.   rub = Val(MoneyString)
    38.  End If
    39. End Function
    40. 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
    41.  Dim s As String
    42.  If num = 0 Then
    43.   MakeUnitString = NullString
    44.    Exit Function
    45.  End If
    46.  s = MakeUnitHundred(num Mod 1000, gender, one, two, ten)
    47.  num = num \ 1000
    48.  If num <> 0 Then
    49.   s = MakeUnitHundred(num Mod 1000, gnFemale, "тысяча", "тысячи", "тысяч") & " " & s
    50.   num = num \ 1000
    51.   If num <> 0 Then
    52.    s = MakeUnitHundred(num Mod 1000, gnMale, "миллион", "миллиона", "миллионоа") & " " & s
    53.   End If
    54.  End If
    55.  MakeUnitString = s
    56. End Function
    57. 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
    58.   num = num Mod 1000
    59.   MakeUnitHundred = Hundreds(num) & Decims(num, gender, one, two, ten)
    60. End Function
    61. Private Function Hundreds(ByVal num As Long)
    62.  Dim a(0 To 9) As String
    63.  a(0) = ""
    64.  a(1) = "сто "
    65.  a(2) = "двести "
    66.  a(3) = "триста "
    67.  a(4) = "четыреста "
    68.  a(5) = "пятьсот "
    69.  a(6) = "шетьсот "
    70.  a(7) = "семьсот "
    71.  a(8) = "восемьсот "
    72.  a(9) = "девятьсот "
    73.  
    74.  Hundreds = a(num \ 100)
    75. End Function
    76. 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)
    77.  Dim s As String
    78.  s = SecondDecims(num)
    79.  If s = "" Then
    80.   Dim a(0 To 9) As String
    81.   a(0) = ""
    82.   a(1) = ""
    83.   a(2) = "двадцать "
    84.   a(3) = "тридцать "
    85.   a(4) = "сорок "
    86.   a(5) = "пятьдесят "
    87.   a(6) = "шестьдесят "
    88.   a(7) = "семьдесят "
    89.   a(8) = "восемьдесят "
    90.   a(9) = "девяносто "
    91.    s = a((num \ 10) Mod 10) & Digits(num, gender, one, two, ten)
    92.  Else
    93.    s = s & ten
    94.  End If
    95.  Decims = s
    96. End Function
    97. Private Function SecondDecims(ByVal num As Long) As String
    98.  num = num Mod 100 - 10
    99.  Dim a(0 To 9) As String
    100.  If num > 9 Or num < 0 Then
    101.     SecondDecims = ""
    102.  Else
    103.     a(0) = "десять "
    104.     a(1) = "одиннадцать "
    105.     a(2) = "двенадцать "
    106.     a(3) = "тринадцать "
    107.     a(4) = "четырнадцать "
    108.     a(5) = "пятнадцать "
    109.     a(6) = "шестнадцать "
    110.     a(7) = "семнадцать "
    111.     a(8) = "восемнадцать "
    112.     a(9) = "девятнадцать "
    113.     SecondDecims = a(num)
    114.  End If
    115.  
    116.  
    117. End Function
    118. 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)
    119.  Dim a(0 To 9, 0 To 2) As String
    120.  num = num Mod 10
    121.  If num = 0 Then
    122.   Digits = ten
    123.  Else
    124.   a(1, 0) = "один ":   a(1, 1) = "одна ": a(1, 2) = "одно ":
    125.   a(2, 0) = "два ":    a(2, 1) = "две ": a(2, 2) = "два ":
    126.   a(3, 0) = "три ":    a(3, 1) = "три ": a(3, 2) = "три ":
    127.   a(4, 0) = "четыре ": a(4, 1) = "четыре ": a(4, 2) = "четыре ":
    128.   a(5, 0) = "пять ":   a(5, 1) = "пять ": a(5, 2) = "пять ":
    129.   a(6, 0) = "шесть ":  a(6, 1) = "шесть ": a(6, 2) = "шесть ":
    130.   a(7, 0) = "семь ":   a(7, 1) = "семь ": a(7, 2) = "семь ":
    131.   a(8, 0) = "восемь ": a(8, 1) = "восемь ": a(8, 2) = "восемь ":
    132.   a(9, 0) = "девять ": a(9, 1) = "девять ": a(9, 2) = "девять ":
    133.   Select Case num
    134.   Case 1
    135.    Digits = a(num, gender) & one
    136.   Case 2, 3, 4
    137.    Digits = a(num, gender) & two
    138.   Case Else
    139.    Digits = a(num, gender) & ten
    140.   End Select
    141.  End If
    142. End Function
    143.  
    144.  
    145.  
    146.  
    147. Function NDS1(ByVal m As String) As String
    148.  On Error GoTo errr
    149.  Dim m1 As String
    150.  Dim m2 As String
    151.  m = Format(m, "0.00")
    152.  m1 = Format(m / 1.18, "0.00")
    153.  m2 = m - m1
    154.  NDS1 = RubKop(m2)
    155. ex:
    156.  Exit Function
    157. errr:
    158.  NDS1 = "—"
    159.  Resume ex
    160. End Function
    161. Function NDS(ByVal m) As String
    162. If m = 0 Then
    163.  NDS = "—"
    164.  Exit Function
    165. End If
    166. On Error GoTo errr
    167.  Dim rub As Long, kop As Integer
    168.  Dim m1 As String, rub1 As Long, kop1 As Integer
    169.  Dim m2 As String, rub2 As Long, kop2 As Integer
    170.  m = Format(m, "0.00")
    171.  m1 = Format(m / 1.18, "0.00")
    172.  'm = Format(m, "##")
    173.  'm1 = Format(m / 1.2, "##")
    174.  m2 = m - m1
    175.  
    176.  Separate m, rub, kop
    177.  Separate m1, rub1, kop1
    178.  Separate m2, rub2, kop2
    179.  
    180.  NDS = rub & "-" & Format(kop, "00") & "(" & rub1 & "-" & Format(kop1, "00") & " + ??? 18% - " & rub2 & "-" & Format(kop2, "00") & ")"
    181. ex:
    182.  Exit Function
    183. errr:
    184.  NDS = "—"
    185.  Resume ex
    186. End Function
    187. Function RubKop1(ByVal m, ByVal m1) As String
    188. On Error GoTo errr
    189. RubKop1 = RubKop(m / m1)
    190. ex:
    191. Exit Function
    192. errr:
    193.  RubKop1 = "—"
    194.  Resume ex
    195. End Function
    196. Function RubKop(ByVal m) As String
    197. If m = 0 Then
    198.  RubKop = "—"
    199.  Exit Function
    200. End If
    201. Dim rub As Long, kop As Integer
    202. m = Format(m, "0.00")
    203. Separate m, rub, kop
    204. RubKop = rub & "-" & Format(kop, "00")
    205. End Function
    206. Function EM(s) As String
    207.  If IsEmpty(s) Then
    208.   EM = ""
    209.  Else
    210.   EM = s
    211.  End If
    212. End Function
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    0o
     
  24. Anonymous

    Anonymous Guest

    чем тебе мой код не нравится?