Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / сумма прописью / 10 сообщений из 10, страница 1 из 1
23.03.2009, 16:53
    #35886263
sommer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
нет ли какого-нибудь готового модуля, который генерит сумму "прописью" на русском, т.е. 300 000 -> триста тысяч
...
Рейтинг: 0 / 0
24.03.2009, 11:29
    #35887601
danii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
Код: 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.
 public   class  Num{
   public   final   static   int  DG_POWER= 6 ;
  
   private   final   static  String[][] a_power =  new  String[][]{
   {"0", ""            , ""             ,""              },  // 1
   {"1", "тысяча "     , "тысячи "      ,"тысяч "        },  // 2
   {"0", "миллион "    , "миллиона "    ,"миллионов "    },  // 3
   {"0", "миллиард "   , "миллиарда "   ,"миллиардов "   },  // 4
   {"0", "триллион "   , "триллиона "   ,"триллионов "   },  // 5
   {"0", "квадриллион ", "квадриллиона ","квадриллионов "},  // 6
   {"0", "квинтиллион ", "квинтиллиона ","квинтиллионов "}   // 7
  };

   private   final   static  String[][] digit =  new  String[][] {
   {""       ,""       , "десять "      , ""            ,""          },
   {"один "  ,"одна "  , "одиннадцать " , "десять "     ,"сто "      },
   {"два "   ,"две "   , "двенадцать "  , "двадцать "   ,"двести "   },
   {"три "   ,"три "   , "тринадцать "  , "тридцать "   ,"триста "   },
   {"четыре ","четыре ", "четырнадцать ", "сорок "      ,"четыреста "},
   {"пять "  ,"пять "  , "пятнадцать "  , "пятьдесят "  ,"пятьсот "  },
   {"шесть " ,"шесть " , "шестнадцать " , "шестьдесят " ,"шестьсот " },
   {"семь "  ,"семь "  , "семнадцать "  , "семьдесят "  ,"семьсот "  },
   {"восемь ","восемь ", "восемнадцать ", "восемьдесят ","восемьсот "},
   {"девять ","девять ", "девятнадцать ", "девяносто "  ,"девятьсот "}
  };

   public   static  String toString ( int  sum){
     int     i,mny;
    StringBuffer result=  new  StringBuffer("");
     long  divisor; //делитель
     int  psum = sum;

     int  one  =  1 ;
     int  four =  2 ;
     int  many =  3 ;
    
     int  sex  =  0 ;
     int  hun  =  4 ;
     int  dec  =  3 ;
     int  dec2 =  2 ;
    
     if (sum ==  0 )  return  "ноль ";
     if (sum <   0 ){ result.append("минус "); psum = -psum;}

     for (i= 0 ,divisor= 1 ; i<DG_POWER; i++) divisor *=  1000 ;
    
     for (i=DG_POWER- 1 ; i>= 0 ; i--){
      divisor /=  1000 ;
      mny = ( int )(psum / divisor);
      psum %= divisor;
      //str="";
       if (mny== 0 ){
         if (i> 0 )  continue ;
        result.append( a_power[i][one] );
      } else {
         if (mny>= 100 ){ result.append( digit[mny/ 100 ][hun]); mny%= 100 ; }
         if (mny>= 20  ){ result.append( digit[mny/ 10  ][dec]); mny%= 10 ; }
         if (mny>= 10  ){ 
        	result.append( digit[mny- 10  ][dec2]); 
        } else {
           if (mny>= 1   ) result.append( digit[mny][ "0".equals(a_power[i][ 0 ]) ?  0  :  1  ] );
        }
         switch (mny){
           case    1 : result.append( a_power[i][one] );  break ;
           case    2 : 
           case    3 :
           case    4 : result.append( a_power[i][four]);  break ;
           default : result.append( a_power[i][many]);  break ;
        };
      }
    }
     return  result.toString();
  }
  
   public   static  String toString( double  num ){
  	 return  toString( ( int )num) + "."+ toString( ( int )(num* 100  - (( int )num)* 100 ) );
  }

} 
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.03.2010, 15:54
    #36545023
Lukasz Lech
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
Я преобразовал модуля таким образом, чтобы работать с BigDecimal
Speak russian numbers in Java
...
Рейтинг: 0 / 0
26.03.2010, 16:24
    #36545132
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
...
Рейтинг: 0 / 0
28.03.2010, 13:34
    #36546765
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
В исходнике danii метод Num.toString(int ..) оставляет хвостовые пробелы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.11.2016, 09:51
    #39350232
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
Сумма прописью для русского, украинского и английского языков: https://github.com/javadev/moneytostr-russian

С уважением, Валентин
...
Рейтинг: 0 / 0
07.01.2017, 14:25
    #39380314
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
...
Рейтинг: 0 / 0
09.01.2017, 11:04
    #39380732
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
Мне в свое время тоже пришлось делать число прописью, только с падежами, склонениями и прочими финтифлюшками. Не буду хвастаться говнокодом, вопрос скорее о русском языке. Было затруднение с порядковыми номерами
12...20002001первыйвторой?две тысячи первыйперваявторая?две тысячи перваяпервоевторое?две тысячи первоепервыевторые?две тысячи первые
Как бы вы написали эти порядковые номера, где знак "?"
а как 4001000 ? А в склонениях?
...
Рейтинг: 0 / 0
09.01.2017, 11:23
    #39380744
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
А 51000 в виде порядкового номера сможете написать?
...
Рейтинг: 0 / 0
09.01.2017, 16:23
    #39380944
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сумма прописью
ivanraКак бы вы написали эти порядковые номера, где знак "?"


все уже давно придумано за вас:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
import com.ibm.icu.text.RuleBasedNumberFormat;
import com.ibm.icu.util.ULocale;

public class Test {

	public static void main(String[] args) {
		RuleBasedNumberFormat format = new RuleBasedNumberFormat(new ULocale("ru"), RuleBasedNumberFormat.SPELLOUT);
		System.out.println(format.format(2000, "%spellout-ordinal-masculine"));
		System.out.println(format.format(2000, "%spellout-ordinal-feminine"));
		System.out.println(format.format(2000, "%spellout-ordinal-neuter"));
		System.out.println(format.format(2000, "%spellout-ordinal-plural"));
	}

}



Код: plaintext
1.
2.
3.
4.
двухтысячный
двухтысячная
двухтысячное
двухтысячные

Однако (: (нужно патч ребятам отправить)

Код: java
1.
2.
3.
4.
	System.out.println(format.format(100, "%spellout-ordinal-masculine"));
        System.out.println(format.format(101, "%spellout-ordinal-masculine"));
        System.out.println(format.format(200, "%spellout-ordinal-masculine"));
        System.out.println(format.format(201, "%spellout-ordinal-masculine"));



Код: plaintext
1.
2.
3.
4.
сотый
сто первый
>>>двести<<<
двести первый
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / сумма прописью / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]