powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / сумма прописью
10 сообщений из 10, страница 1 из 1
сумма прописью
    #35886263
sommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет ли какого-нибудь готового модуля, который генерит сумму "прописью" на русском, т.е. 300 000 -> триста тысяч
...
Рейтинг: 0 / 0
сумма прописью
    #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
Период между сообщениями больше года.
сумма прописью
    #36545023
Lukasz Lech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я преобразовал модуля таким образом, чтобы работать с BigDecimal
Speak russian numbers in Java
...
Рейтинг: 0 / 0
сумма прописью
    #36545132
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
сумма прописью
    #36546765
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В исходнике danii метод Num.toString(int ..) оставляет хвостовые пробелы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
сумма прописью
    #39350232
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сумма прописью для русского, украинского и английского языков: https://github.com/javadev/moneytostr-russian

С уважением, Валентин
...
Рейтинг: 0 / 0
сумма прописью
    #39380314
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
сумма прописью
    #39380732
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне в свое время тоже пришлось делать число прописью, только с падежами, склонениями и прочими финтифлюшками. Не буду хвастаться говнокодом, вопрос скорее о русском языке. Было затруднение с порядковыми номерами
12...20002001первыйвторой?две тысячи первыйперваявторая?две тысячи перваяпервоевторое?две тысячи первоепервыевторые?две тысячи первые
Как бы вы написали эти порядковые номера, где знак "?"
а как 4001000 ? А в склонениях?
...
Рейтинг: 0 / 0
сумма прописью
    #39380744
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А 51000 в виде порядкового номера сможете написать?
...
Рейтинг: 0 / 0
сумма прописью
    #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
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / сумма прописью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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