Задача: Преобразование сумм из цифрового представления в строковое
Исходник: сумма прописью javascript, язык: javascript [code #612, hits: 17720]
аноним: Евгений Гавриленко [добавлен: 21.08.2010]
  1. //function plural(n, forms) {
  2. // return forms[n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2];
  3. //}
  4. function money2string(n){
  5. var s1=[['','',''],
  6. [['один','одна'],['десять','одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать'],'сто'],
  7. [['два','две'],'двадцать','двести'],
  8. ['три','тридцать','триста'],
  9. ['четыре','сорок','четыреста'],
  10. ['пять','пятьдесят','пятьсот'],
  11. ['шесть','шестьдесят','шестьсот'],
  12. ['семь','семьдесят','семьсот'],
  13. ['восемь','восемьдесят','восемьсот'],
  14. ['девять','девяносто','девятьсот']];
  15. var b=[['копейка','копейки','копеек'],
  16. ['рубль','рубля','рублей'],//['доллар','доллара','долларов'] или ['килограмм','килограмма','килограммов']
  17. ['тысяча','тысячи','тысяч'],
  18. ['миллион','миллиона','миллионов'],
  19. ['миллиард','миллиарда','миллиардов']//,['трилион',...],[]
  20. ];
  21.  
  22. function m999(n,b,f){
  23. var s='';
  24. var t=s1[Math.floor(n/100)%10][2];
  25. if(t)s+=t+' ';
  26.  
  27. var d=Math.floor(n/10)%10;
  28. t=s1[d][1];
  29. if(t instanceof Array){
  30. t=t[n%10];
  31. if(t)s+=t+' ';
  32. }else{
  33. if(t)s+=t+' ';
  34. t=s1[n%10][0];
  35. if(t instanceof Array)t=t[f==0 || f==2?1:0];
  36. if(t)s+=t;
  37. }
  38.  
  39. return s+' '+plural(n,b[f])+(f>1?' ':'');
  40. }
  41.  
  42. var i = Math.floor(n + 0.005),
  43. f = Math.floor(((n - i) * 100) + 0.5),
  44. s='';
  45. for (var j=1; i > 0.9999; i/=1000) {
  46. s=m999(Math.floor(i % 1000),b,j)+s;
  47. j++;
  48. }
  49. if(f>0)s=s+' '+m999(f,b,0)
  50. return s;
  51. }
еще одна реализация

+добавить реализацию