|
|
|
Запись числа прописью.
|
|||
|---|---|---|---|
|
#18+
Как получить в A97 из 32678,5 р. Тридцать две тысячи шестьсот семьдесят восемь рублей пятьдесят копеек. т.е. вводит человек сумму, а она ему оп-па и прописью пишется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:00 |
|
||
|
Запись числа прописью.
|
|||
|---|---|---|---|
|
#18+
/topic/55475&hl=%f7%e8%f1%eb%ee+%ef%f0%ee%ef%e8%f1%fc%fe\r и поск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:02 |
|
||
|
Запись числа прописью.
|
|||
|---|---|---|---|
|
#18+
Вот, пож-ста, тока, правда, на паскале. Я думаю, нетрудно будет на VBA перевести? //----------------------------- // Перевод цифры в рубли прописью // Автор - Малиновский Владимир Владимирович // Vlad-mal@yandex.ru function Value_Spelled_Out(Summa : currency; Penny_For_Penny : boolean = false) : String; //----------------------------- type TOneToNineteen = array [1..19] of string; const OneToNineteen : array[1..19] of string = ('один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'); TenToNinety : array[1..9] of string = ('десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'); OneHunderdToNineHundreds : array [1..9] of string = ('сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'); MaleCase : array[1..19] of string = (' ', 'а ', 'а ', 'а ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов ', 'ов '); FemaleCase : array[1..19] of string = ('а ', 'и ', 'и ', 'и ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); var Digits: array[1..15] of integer; S1 : int64; S2, NumberOfDigits, ix, k, m : integer; Rub_Word, Kop_Word : string; begin // Summa - Исходная сумма // не более 999 999 999 999 999.99 руб. // (...ну, если позволяет компутер...) // (а так для Currency max = 922 337 203 685 477.5807) if (Abs(Summa) > 922337203685477.5807) then begin Result := '********** pубля '; exit end; if Summa < 0 then Result := 'Минус ' else Result := ''; Summa := Abs(Summa); S1 := trunc(Summa); S2 := trunc((Summa-S1)*100); // s1 - рубли, s2 - копейки NumberOfDigits := 0; while s1 > 0 do begin // Разбиваем на десятичные числа inc(NumberOfDigits); Digits[NumberOfDigits] := s1 mod 10; s1 := s1 div 10; end; if NumberOfDigits = 0 then Result := 'Hуль ' else begin ix := NumberOfDigits; while ix > 0 do begin k := ix mod 3; // Разбиваем на десятичные триады if k = 0 then k := 3; if (k = 2) and (Digits[ix] = 1) then begin // 10 - 19 dec(ix); k := 1; Result := Result + OneToNineteen[10+Digits[ix]] + ' '; m := 10 + Digits[ix] end else if Digits[ix] > 0 then begin if (ix = 4) and (Digits[ix]=1) then Result := Result + 'одна ' else if (ix = 4) and (Digits[ix]=2) then Result := Result + 'две ' else if k = 1 then Result := Result + OneToNineteen[Digits[ix]] + ' ' else if k = 2 then Result := Result + TenToNinety[Digits[ix]] + ' ' else if k = 3 then Result := Result + OneHunderdToNineHundreds[Digits[ix]] + ' '; m := Digits[ix] end else m := 10; if k = 1 then if ix = 13 then // триллионов Result := Result + 'триллион' + MaleCase[m] else if ix = 10 then // миллиардов Result := Result + 'миллиард' + MaleCase[m] else if ix = 7 then // миллионов Result := Result + 'миллион' + MaleCase[m] else if (ix = 4) and (Digits[4]+Digits[5]+Digits[6] > 0) // тысяч then Result := Result + 'тысяч' + FeMaleCase[m]; dec(ix); end; // while end; // else // Пусть будет с 1-й большой буквы Result[1] := AnsiUpperCase(Result[1])[1]; S1 := trunc(Summa) mod 100; if S1>20 then S1 := S1 mod 10; if S1=1 then Rub_Word:='рубль' else if (S1=2) or (S1=3) or (S1=4) then Rub_Word := 'рубля' else Rub_Word := 'рублей'; Result := Result + Rub_Word; if Penny_For_Penny then begin // До копеек S1 := S2; if S1>20 then S1 := S1 mod 10; if S1=1 then Kop_Word:='копейка' else if (S1=2) or (S1=3) or (S1=4) then Kop_Word := 'копейки' else Kop_Word := 'копеек'; Result := Result + format(' %.2d ',[s2]) + Kop_Word; end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:02 |
|
||
|
Запись числа прописью.
|
|||
|---|---|---|---|
|
#18+
ВОТ! Модераторам - если несложно - просьба добавить в ФАК Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:31 |
|
||
|
Запись числа прописью.
|
|||
|---|---|---|---|
|
#18+
Спасибо тов. Гавриленко Сергей Алексеевич за ссылку, я понял принцип и идею того как надо это делать. Спасибо тов. mv за такой ответ, но я наверное лучше сам напишу ибо принцип построения мне стал понятен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 16:32 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1689&tid=1676962]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 377ms |

| 0 / 0 |
