Posted By

stz184 on 12/20/11


Tagged

words numbers convert


Versions (?)

Convert numbers to words (Bulgarian language)


 / Published in: PHP
 

URL: http://vladimir-ivanov.net

This function accept one parameter (integer or float) and returns the same number writed with words. Useful for currencies and invoices.

  1. function slovom($num, $tri = 0) {
  2. $edinici = array(
  3. 0 => "",
  4. 1 => array(
  5. 0 => " един",
  6. 1 => "",
  7. 2 => " eдин",
  8. 3 => " eдин",
  9. 4 => " eдин",
  10. 5 => " eдин",
  11. 6 => " eдин",
  12. 7 => " eдин",
  13. 8 => " eдин",
  14. 9 => " eдин",
  15. 10 => " eдин",
  16. ),
  17. 2 => array(
  18. 0 => " два",
  19. 1 => " двe",
  20. 2 => " два",
  21. 3 => " два",
  22. 4 => " два",
  23. 5 => " два",
  24. 6 => " два",
  25. 7 => " два",
  26. 8 => " два",
  27. 9 => " два",
  28. 10 => " два",
  29. ),
  30. 3 => " три",
  31. 4 => " четири",
  32. 5 => " пет",
  33. 6 => " шест",
  34. 7 => " седем",
  35. 8 => " осем",
  36. 9 => " девет",
  37. 10 => " десет",
  38. 11 => " единадесет",
  39. 12 => " дванадесет",
  40. 13 => " тринадесет",
  41. 14 => " четиринадесет",
  42. 15 => " петнадесет",
  43. 16 => " шестнадесет",
  44. 17 => " седемнадесет",
  45. 18 => " осемнадесет",
  46. 19 => " деветнадесет"
  47. );
  48.  
  49. $desetici = array(
  50. 0 => "",
  51. 1 => "",
  52. 2 => " двадесет",
  53. 3 => " тридесет",
  54. 4 => " четиридесет",
  55. 5 => " петдесет",
  56. 6 => " шестдесет",
  57. 7 => " седемдесет",
  58. 8 => " осемдесет",
  59. 9 => " деведесет"
  60. );
  61.  
  62. $stotici = array (
  63. 0 => "",
  64. 1 => " сто",
  65. 2 => " двеста",
  66. 3 => " триста",
  67. 4 => " четиристотин",
  68. 5 => " петстотин",
  69. 6 => " шестстотин",
  70. 7 => " седемстотин",
  71. 8 => " осемстотин",
  72. 9 => " деветстотин",
  73. );
  74.  
  75. $tripleti = array(
  76. 0 => "",
  77. 1 => array(
  78. 0 => " хиляда",
  79. 1 => " хиляди"),
  80. 2 => array(
  81. 0 => " милион",
  82. 1 => " милиона"),
  83. 3 => array(
  84. 0 => " билион",
  85. 1 => " билионa"),
  86. 4 => array(
  87. 0 => " трилион",
  88. 1 => " трилиона"),
  89. 5 => array(
  90. 0 => " квадрилион",
  91. 1 => " квадрилиона"),
  92. 6 => array(
  93. 0 => " квинтилион",
  94. 1 => " квинтилиони"),
  95. 7 => array(
  96. 0 => " сикстилион",
  97. 1 => " сикстилион"),
  98. 8 => array(
  99. 0 => " септилион",
  100. 1 => " септилиони"),
  101. 9 => array(
  102. 0 => " октилион",
  103. 1 => " октилион"),
  104. 10 => array(
  105. 0 => " нонилион",
  106. 1 => " нонилиои")
  107. );
  108.  
  109. //взимаме само цялата част от числото, без стойността
  110. //след десетичната запетая
  111. $n = explode(".", $num);
  112. $num = $n[0];
  113. $r = (int) ($num / 1000);
  114. $x = ($num / 100) % 10;
  115. $y = $num % 100;
  116.  
  117. $str = "";
  118.  
  119. // стотици
  120. if ($x > 0) {
  121. $str = $stotici[$x];
  122. }
  123. // единици и десетици
  124. if ($y < 20) {
  125. if($y == 0 && $r > 0) {
  126. $str = ' и '.$str;
  127. }
  128. if(is_array($edinici[$y]) && isset($edinici[$y][$tri])) {
  129. $str .= ' '.$edinici[$y][$tri];
  130. }
  131. else {
  132. $str .= ' '.$edinici[$y];
  133. }
  134. }
  135. else {
  136. if($edinici[$y % 10]) {
  137. $str .= $desetici[(int) ($y / 10)];
  138. $str .= ' и';
  139. if(is_array($edinici[$y % 10]) && isset($edinici[$y % 10][$tri])) {
  140. $str .= $edinici[$y % 10][$tri];
  141. }
  142. else {
  143. $str .= $edinici[$y % 10];
  144. }
  145. }
  146. else {
  147. $str .= ' и'.$desetici[(int) ($y / 10)];
  148. }
  149. }
  150.  
  151. // добавяне на модификатор - хиляди, милиони, билиони
  152.  
  153. if ($str != "") {
  154. //Ако има зададени опции за единствено и мн. число
  155. if(is_array($tripleti[$tri])) {
  156. //мн. число ли е?
  157. if($num > 1) {
  158. $str .= $tripleti[$tri][1];
  159. }
  160. else {
  161. $str .= $tripleti[$tri][0];
  162. }
  163. }
  164. else {
  165. $str .= $tripleti[$tri];
  166. }
  167. $str = str_replace('един стотин', 'сто', $str);
  168. $str = str_replace('един хиляди', 'хиляда', $str);
  169. }
  170.  
  171. //ако сме на първата стъпка (т.е. определяме числото до стотици)
  172. if($tri == 0) {
  173. //добавяме префикс за лева
  174. $str .= ' лева';
  175. //и ако има сетнати стотинки ги добавяме и тях
  176. if(isset($n[1])) {
  177. $str .= ' и '.$n[1].'ст.';
  178. }
  179. }
  180.  
  181. // продължаване рекрусивно?
  182. if ($r > 0) {
  183. return slovom($r, $tri+1).$str;
  184. }
  185. else {
  186. return $str;
  187. }
  188. }

Report this snippet  

You need to login to post a comment.