|
|
|
Сумма прописью
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Посоветуйте пожалуйста 100% работающую функцию для получения суммы прописью. Кто какие функции использует? Спасибо С Уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 16:47 |
|
||
|
Сумма прописью
|
|||
|---|---|---|---|
|
#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. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 16:52 |
|
||
|
Сумма прописью
|
|||
|---|---|---|---|
|
#18+
Попробуй это. Хочешь далай DLL, а хочешь подключай так... unit MonToStr; interface function sMoneyInWords( Nin: currency ): string; export; function szMoneyInWords( Nin: currency ): PChar; export; { Денежная сумма Nin в рублях и копейках прописью 1997, в.2.1, by О.В.Болдырев} var Result : integer; implementation uses SysUtils,Dialogs,Math; type tri=string; mood=1..2; gender=(m,f); uns =array[0..9] of string[7]; tns =array[0..9] of string[13]; decs=array[0..9] of string[12]; huns=array[0..9] of string[10]; nums=array[0..4] of string[8]; money=array[1..2] of string[5]; endings=array[gender,mood,1..3] of tri;{окончания числительных и денег} const units:uns =('','один ','два ','три ','четыре ','пять ', 'шесть ','семь ','восемь ','девять '); unitsf:uns=('','одна ','две ','три ','четыре ','пять ', 'шесть ','семь ','восемь ','девять '); teens:tns= ('десять ','одиннадцать ','двенадцать ','тринадцать ', 'четырнадцать ','пятнадцать ','шестнадцать ', 'семнадцать ','восемнадцать ','девятнадцать '); decades:decs=('','десять ','двадцать ','тридцать ','сорок ', 'пятьдесят ','шестьдесят ','семьдесят ','восемьдесят ', 'девяносто '); hundreds:huns=('','сто ','двести ','триста ','четыреста ', 'пятьсот ','шестьсот ','семьсот ','восемьсот ', 'девятьсот '); numericals:nums=('','тысяч','миллион','миллиард','триллион'); RusMon:money=('рубл','копе'); ends:endings=((('','а','ов'),('ь','я','ей')), (('а','и',''),('йка','йки','ек'))); threadvar str: string; function EndingIndex(Arg: integer): integer; begin if ((Arg div 10) mod 10) <> 1 then case (Arg mod 10) of 1: Result := 1; 2..4: Result := 2; else Result := 3; end else Result := 3; end; function sMoneyInWords( Nin: currency ): string; { Число Nin прописью, как функция } var // str: string; g: gender; //род Nr: comp; {целая часть числа} Fr: integer; {дробная часть числа} i,iTri,Order: longint; {триада} procedure Triad; var iTri2: integer; un, de, ce :byte; //единицы, десятки, сотни function GetDigit: byte; begin Result := iTri2 mod 10; iTri2 := iTri2 div 10; end; begin iTri := trunc(Nr/IntPower(1000,i)); Nr := Nr - int( iTri*IntPower(1000,i)); iTri2:=iTri; if iTri > 0 then begin un := GetDigit; de := GetDigit; ce := GetDigit; if i=1 then g:=f else g:=m; {женского рода только тысяча} str := TrimRight(str)+' '+Hundreds[ce]; if de = 1 then str := TrimRight(str)+' '+Teens[un] else begin str := TrimRight(str)+' '+Decades[de]; case g of m: str := TrimRight(str)+' '+Units[un]; f: str := TrimRight(str)+' '+UnitsF[un]; end; end; if length(numericals ) > 1 then begin str := TrimRight(str)+' '+numericals; str := TrimRight(str)+ends[g,1,EndingIndex(iTri)]; end; end; //triad is 0 ? if i=0 then Exit; Dec(i); Triad; end; begin str := ''; Nr := int( Nin ); Fr := round( Nin*100 + 0.00000001 ) mod 100; if Nr>0 then Order := trunc(Log10(Nr)/3) else begin str := 'ноль'; Order := 0 end; if Order > High(numericals) then raise Exception.Create('Слишком большое число для суммы прописью'); i:= Order; Triad; str := Format('%s %s%s %.2d %s%s', [Trim(str),RusMon,ends[m,2,EndingIndex(iTri)], Fr, RusMon,ends[f,2,EndingIndex(Fr)]]); str := (ANSIUpperCase(copy(str,1,1))); str[Length(str)+1] := #0; Result := str; end; function szMoneyInWords( Nin: currency ): PChar; begin sMoneyInWords(Nin); Result := @(str); end; end. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 17:10 |
|
||
|
Сумма прописью
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2003, 20:11 |
|
||
|
Сумма прописью
|
|||
|---|---|---|---|
|
#18+
Гугл привел к этой древней теме. Последняя реализация работает, но в ней есть ошибка. Нужно проверять, что у нас все 0 в текущем порядке. Иначе получите, например, не миллион рублей, а миллион тысяч рублей. Код: pascal 1. 2. 3. 4. 5. ... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2019, 22:12 |
|
||
|
Сумма прописью
|
|||
|---|---|---|---|
|
#18+
Есть такая реализация Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2019, 15:10 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39801065&tid=2039581]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 457ms |

| 0 / 0 |
