|
Конвертатор сумму в сумму прописью
#33080746
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
|
|
|
Еще вариантик (с разными валютами)
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. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181.
FUNCTION CurToStr
PARAMETERS nSum, cTxt1 , cTxt2 , cTxt3 , nTypeWrite, cTxt1k , cTxt2k , cTxt3k
* nTypeWrite [= 1 -мужск.род т.е.рубль] / = 2 -женск.род т.е штука
*
* nSum -сумма
*
* cTxt1 , cTxt2 , cTxt3 - "рубль","рубля","рублей" ("доллар","доллара","долларов"
* или "ЕВРО","ЕВРО","ЕВРО" и.т.д)
*
* cTxt1k , cTxt2k , cTxt3k - "копейка","копейки","копеек" ("цент","цента","центов" и.т.д)
IF TYPE("nSum")<>"N"
nSum= 0
ENDIF
DIMENSION aTxtMeasure( 3 )
IF TYPE("cTxt1")<>"C" OR TYPE("cTxt2")<>"C" OR TYPE("cTxt3")<>"C"
aTxtMeasure( 1 )="рубль"
aTxtMeasure( 2 )="рубля"
aTxtMeasure( 3 )="рублей"
ELSE
aTxtMeasure( 1 )=cTxt1
aTxtMeasure( 2 )=cTxt2
aTxtMeasure( 3 )=cTxt3
ENDIF
IF TYPE("nTypeWrite")<>"N"
nTypeWrite= 1
ENDIF
IF nSum= 0
RETURN "Ноль "+aTxtMeasure( 3 )
ENDIF
DIMENSION aTxtThousand( 3 ),aTxtMillion( 3 ),aTxtBillion( 3 ),aTxtTrillion( 3 )'
aTxtThousand( 1 )="тысяча"
aTxtThousand( 2 )="тысячи"
aTxtThousand( 3 )="тысяч"
aTxtMillion( 1 ) ="миллион"
aTxtMillion( 2 ) ="миллиона"
aTxtMillion( 3 ) ="миллионов"
aTxtBillion( 1 ) ="миллиард"
aTxtBillion( 2 ) ="миллиарда"
aTxtBillion( 3 ) ="миллиардов"
aTxtTrillion( 1 )="триллион"
aTxtTrillion( 2 )="триллиона"
aTxtTrillion( 3 )="триллионов"
*----------:
DIMENSION aTxtHundred( 10 ),aTxtTen( 10 ),aTxtExclude( 10 ),aTxtOne( 10 , 2 )
aTxtHundred( 1 )=""
aTxtHundred( 2 )="сто "
aTxtHundred( 3 )="двести "
aTxtHundred( 4 )="триста "
aTxtHundred( 5 )="четыреста "
aTxtHundred( 6 )="пятьсот "
aTxtHundred( 7 )="шестьсот "
aTxtHundred( 8 )="семьсот "
aTxtHundred( 9 )="восемьсот "
aTxtHundred( 10 )="девятьсот "
aTxtTen( 1 )=""
aTxtTen( 2 )=""
aTxtTen( 3 )="двадцать "
aTxtTen( 4 )="тридцать "
aTxtTen( 5 )="сорок "
aTxtTen( 6 )="пятьдесят "
aTxtTen( 7 )="шестьдесят "
aTxtTen( 8 )="семьдесят "
aTxtTen( 9 )="восемьдесят "
aTxtTen( 10 )="девяносто "
aTxtExclude( 1 )="десять"
aTxtExclude( 2 )="одиннадцать"
aTxtExclude( 3 )="двенадцать"
aTxtExclude( 4 )="тринадцать"
aTxtExclude( 5 )="четырнадцать"
aTxtExclude( 6 )="пятнадцать"
aTxtExclude( 7 )="шестнадцать"
aTxtExclude( 8 )="семнадцать"
aTxtExclude( 9 )="восемнадцать"
aTxtExclude( 10 )="девятнадцать"
aTxtOne( 1 , 1 )=""
aTxtOne( 2 , 1 )="один "
aTxtOne( 3 , 1 )="два "
aTxtOne( 4 , 1 )="три "
aTxtOne( 5 , 1 )="четыре "
aTxtOne( 6 , 1 )="пять "
aTxtOne( 7 , 1 )="шесть "
aTxtOne( 8 , 1 )="семь "
aTxtOne( 9 , 1 )="восемь "
aTxtOne( 10 , 1 )="девять "
aTxtOne( 1 , 2 )=""
aTxtOne( 2 , 2 )="одна "
aTxtOne( 3 , 2 )="две "
aTxtOne( 4 , 2 )="три "
aTxtOne( 5 , 2 )="четыре "
aTxtOne( 6 , 2 )="пять "
aTxtOne( 7 , 2 )="шесть "
aTxtOne( 8 , 2 )="семь "
aTxtOne( 9 , 2 )="восемь "
aTxtOne( 10 , 2 )="девять "
*----------:
cTextInWord=IIF(nSum< 0 ,"минус ","")
cSum=SUBSTR(STR(INT(nSum*IIF(nSum< 0 ,- 1 , 1 ))+ 1000000000000000 , 16 ), 2 , 15 )
FOR nPos= 0 TO 4
c3Char=SUBSTR(cSum,nPos* 3 + 1 , 3 )
IF c3Char="000" AND nPos< 4
cTextInWord=cTextInWord+""
ELSE
c1stChar=SUBSTR(c3Char, 1 , 1 )
c2ndChar=SUBSTR(c3Char, 2 , 1 )
c3rdChar=SUBSTR(c3Char, 3 , 1 )
cTextInWord=cTextInWord+aTxtHundred(VAL(c1stChar)+ 1 )
IF c2ndChar="1"
cTextInWord=cTextInWord+aTxtExclude(VAL(c3rdChar)+ 1 )+" "
ELSE
cTextInWord=cTextInWord+aTxtTen(VAL(c2ndChar)+ 1 )
IF nPos= 4
cTextInWord=cTextInWord+aTxtOne(VAL(c3rdChar)+ 1 ,nTypeWrite)
ELSE
cTextInWord=cTextInWord+aTxtOne(VAL(c3rdChar)+ 1 ,IIF(nPos= 3 , 2 , 1 ))
ENDIF
ENDIF
*определяем тип написания размерности(рубль,рубля,рублей):
DO CASE
CASE VAL(c2ndChar)= 1 AND VAL(c3rdChar)> 0 AND VAL(c3rdChar)< 5
nTypeAddition= 3
CASE VAL(c3rdChar)= 1
nTypeAddition= 1
CASE VAL(c3rdChar)> 1 AND VAL(c3rdChar)< 5
nTypeAddition= 2
OTHERWISE
nTypeAddition= 3
ENDCASE
DO CASE
CASE nPos= 0
cTextInWord=cTextInWord+aTxtTrillion(nTypeAddition)+" "
CASE nPos= 1
cTextInWord=cTextInWord+aTxtBillion(nTypeAddition)+" "
CASE nPos= 2
cTextInWord=cTextInWord+aTxtMillion(nTypeAddition)+" "
CASE nPos= 3
cTextInWord=cTextInWord+aTxtThousand(nTypeAddition)+" "
CASE nPos= 4
cTextInWord=cTextInWord+aTxtMeasure(nTypeAddition)+" "
ENDCASE
ENDIF
NEXT
cTextInWord=UPPER(SUBSTR(cTextInWord, 1 , 1 ))+SUBSTR(cTextInWord, 2 )
IF TYPE("cTxt1k")<>"C" OR TYPE("cTxt2k")<>"C" OR TYPE("cTxt3k")<>"C"
aTxtMeasure( 1 )="копейка"
aTxtMeasure( 2 )="копейки"
aTxtMeasure( 3 )="копеек"
ELSE
aTxtMeasure( 1 )=cTxt1k
aTxtMeasure( 2 )=cTxt2k
aTxtMeasure( 3 )=cTxt3k
ENDIF
c1stChar=SUBSTR(STR(nSum*IIF(nSum< 0 ,- 1 , 1 ), 18 , 2 ), 17 , 1 )
c2ndChar=SUBSTR(STR(nSum*IIF(nSum< 0 ,- 1 , 1 ), 18 , 2 ), 18 , 2 )
DO CASE
CASE VAL(c2ndChar)= 1
nTypeAddition= 1
CASE VAL(c2ndChar)> 1 AND VAL(c2ndChar)< 5
nTypeAddition= 2
OTHERWISE
nTypeAddition= 3
ENDCASE
cTextInWord=cTextInWord+c1stChar+c2ndChar+" "+aTxtMeasure(nTypeAddition)
RETURN cTextInWord
|
|
|