JavaRush /Java Blog /Random-TK /Java-da sanlaryň çykyşyny formatlaň

Java-da sanlaryň çykyşyny formatlaň

Toparda çap edildi
Hemmäňize salam! Köplenç usullarymyz käbir aýratyn formatda görkezilmeli sanlar bilen gelýär. Bu kiçijik bir zat ýaly bolup görünýär, ýöne bu meseläni nädip durmuşa geçirerdiňiz? Java-da sanlaryň çykyşyny formatlaň - 1Bu gün bu barada azajyk pikirlenmäge çagyrýarys. Ilki bilen, Java-da san formatirlemesine çümmek üçin, String synpynyň format usulyny ýada salalyň : köpçülikleýin statiki setir formaty (String formaty, Obýekt ... args) - galan args argumentlerini ulanyp, format setirinden formatlanan setiri gaýtaryp berýär . Diňe bir mysal:
String str = String.format("Hi - %s! How are you %s?", "Sasha", "At work");
System.out.println(str);
Netijede, konsolda çykyşy alarys:
Salam Saşa! Işler nähili?

Printf we format usullary

String.format () setiri formatlamagyň ýeke-täk usuly däl. Onuň meňzeşleri System.out.printf () we System.out.format (); . Şeýlelik bilen, öňki kody çalşyp bileris:
System.out.printf("Hi - %s! How are you %s?", "Sasha", "At work");
ýa-da
System.out.format("Hi - %s! How are you %s?", "Sasha", "At work");
Konsoldaky çykyş öňküligine galar. Onlyeke-täk tapawut, bu usullar String.format () -dan tapawutlylykda konsolda bahany derrew görkezýär . Ströne men String.format () has gowy görýärin, sebäbi netijäni hemişe konsolda görkezmek hökman däl, şonuň üçin bu usuly mundan beýläk ulanarys. Geliň, mysalymyza gaýdyp geleliň. Biz näme görýäris? Hakykat, nyşanlaryň bolan ýerlerinde - % s , "Saşa" we "iş ýerinde" setirler goýulýar . Bu bize ösüşde nähili kömek edip biler? Uly şablon tekstiniň bardygyny göz öňüne getiriň, ýöne käbir ýerlerde üýtgeşik we daşardan argument hökmünde gelip biljek bahalary girizmeli. Bu formatirlemegiň amatly ýeri. Format kesgitleýjileri göterim belgisi,% bilen başlaýar we formatlanjak argumentiň görnüşini görkezýän nyşan bilen gutarýar. Mümkin, düşünşiňiz ýaly, obýektleri - setirleri goýmak üçin % s ulanylýar. Emma, ​​mysal üçin, setir obýektiniň hasaba alnan ýerine iki esse saljak bolsak :
String str = String.format("Hi - %s! How are you %s?", 55.6, "At work");
bu hem işlär. goşa setir zyňylar we alarys:
Salam - 55,6! Işler nähili?
Setirlerden we ýüzýän nokatlardan başga-da, Java-da başga görnüşler bar, şeýlemi? Geliň, tutuş arsenala göz aýlalyň:
Formatlamak üçin bahanyň görnüşi Mysal
% s Setire zyňyljak islendik görnüş
String.format("Hi %s!","world")
Netije:
Salam Dünýä!
% b Boolean zyňyljak islendik görnüş : dogry - eger bahasy ýok bolsa, ýalan - null bolsa
String.format("Hi %b!",null)
Netije:
Salam ýalan
% sag HashCode () usulyndan alty sanly baha setirine atyljak islendik obýekti geçirip bilersiňiz
String.format("Hi %h!","world")
Netije:
Salam 106c44!
% c Icunikod nyşanyny görkezmek üçin ulanylýar
String.format("Hello m%cr!",'And')
Netije:
Salam Dünýä!
% d Bitewi san görkezilýär ( int. Baýt, gysga, int, uzyn, BigInteger )
String.format("I'm already %d!",20)
Netije:
Men eýýäm 20 ýaşymda!
% f Floüzýän nokat belgisini görkezmek üçin ulanylýar
String.format("PI is - %f!", 3.14159)
Netije:
PI belgisi - 3.141590!
% e Ylmy bellikde ýüzýän nokatlar
String.format("PI is - %e!", 3.14159);
Netije:
PI belgisi - 3.141590e + 00!
% a Loüzýän nokatlaryň sanlary altyburçlukda görkeziler
String.format("PI is - %a!", 3.14159)
Netije:
PI belgisi - 0x1.921f9f01b866ep1!
% x Bir bitewi san ( int. Baýt, gysga, int, uzyn, BigInteger ) geçýär , formatirlemegiň netijesi ASCII tablisasynda berlen san bilen nyşan bolar.
String.format("I'm already %x!",25)
Netije:
Men eýýäm 19 ýaşymda!
% o Bitewi san ( int. Baýt, gysga, int, uzyn, BigInteger ) kabul edilýär we sekiz san hökmünde görkeziler
String.format("I already %o!",25);
Netije:
Men eýýäm 31 ýaşymda!
% t Sene we wagt öwrülişiginiň prefiksi. Formatlamak üçin goşmaça baýdaklar talap edilýär
String.format("Today is %tA",new Date())
Netije:
Bu gün şenbe
% n Platforma aýratyn setir bölüji. Analog \ n
String.format("Hello %n Hello")
Netije:
Salam Salam
Iki gezek has amatly formaty ulanalyň:
String str = String.format("The distance from Kyiv to Odessa is %f. Not so short, is it?", 475.4d);
System.out.println(str);
Konsol çykyşy:
Kiýewden Odessa çenli aralyk 475.400000. Kiçijik däl, şeýlemi?
Düşünen bolmagyňyz mümkin, % f ýüzýän nokatlaryň sanlary üçin has ýerlikli spesifikator bolup, Java-da goşa we ýüzmek ýaly maglumat görnüşlerini öz içine alýar . Bu kesgitleýji bilen ýüzýän nokat belgisini formatlap bileris:
String str = String.format("The distance from Kyiv to Odessa is %.2f. Not so short, is it?", 475.4d);
Bu kesgitleýjä .2 goýmak, onluk ýerleriň sanyny iki bölege bölüp, bize çykyş berer:
Kiýewden Odessa çenli aralyk 475.40. Kiçijik däl, şeýlemi?
.2 kesgitleýjilere ýeke-täk düzediş däl. Bu kiçi bölümleriň utgaşmasy görkezme diýilýär . GörkezmeleriňJava-da sanlaryň çykyşyny formatlaň - 2 umumy görnüşi aşakdakylar:
% [argument_index] [baýdaklar] [ini] [. takyklyk] görnüş spesifikatory
Indi hemme zady tertipli kesgitläliň:
  • [argument_index] argumentler sanawyndaky pozisiýany görkezýän bitewi san. Mysal üçin, birinji argumentiň baglanyşygy $ 1, ikinji argumentiň baglanyşygy $ 2 we ş.m. Positioner kesgitlenmedik bolsa, argumentler format setirinde görkezilişi ýaly tertipde bolmaly.
  • [baýdaklar] formatlamak üçin ýörite nyşanlardyr. Mysal üçin:
    • + san bahasy polo isitel bolsa, onda + belgisi bolmalydygyny görkezýän baýdak
    • - netijäni çepe deňleşdirmegi aňladýar
    • , bitewi sanlar üçin müňlerçe bölüjini düzýär
  • [ini], çykjak nyşanlaryň iň az sanyny kesgitleýän polo positiveitel onluk bitewi san. Bu sanyň öňünde 0 bar bolsa, ýiten nyşanlar 0 bilen ýazylar, 0 ýok bolsa, boşluklar bilen.
  • [. takyklyk] nokatdan öň otrisatel däl bitewi san. Adatça nyşanlaryň sanyny çäklendirmek üçin ulanylýar. Aýratyn hereket, kesgitleýjiniň aýratyn görnüşine baglydyr.
Şeýle hem, görkezmeleriň ýokardaky elementleriniň hemmesiniň islege baglydygyny we hemme zadyň olarsyz işlejekdigini belläsim gelýär. Subsetleri ulanmagyň mysaly hökmünde, Pi belgisiniň belli bir çykyşynyň gerekdigini göz öňüne getireliň:
String str = String.format("%1$+09.5f", 3.1415926535897);
System.out.print(str);
Şoňa laýyklykda konsoldaky çykyş:
+03.14159
Aňsat görünýär, şeýlemi? Emma san formatlamak barada aýdylanda, “DecimalFormat” -y äsgermezlik edip bolmaz . Munuň nämäni aňladýandygyny bileliň.

“DecimalFormat”

“DecimalFormat” , bitewi ýa-da ýüzýän nokat belgisi bolsun, Java-da islendik belgini formatlamak üçin synpdyr. “DecimalFormat” obýekti döredilende , gelýän sanlary gönüden-göni konstruktorda formatlamak üçin bir şablon kesgitläp bilersiňiz. “DecimalFormat” -y ulanmagyň mysaly şu :
DecimalFormat dF = new DecimalFormat( "#.###" );
double value = 72.224463;
System.out.print(dF.format(value));
Konsol çykyşy:
72,224
#. ### setir , geçen bahany 3 onluk ýere formatlaýandygymyzy görkezýän nagyş. Nagyşlar üçin başga haýsy nyşanlar bar? Ine, olaryň käbiri:
  • # - san, öňdebaryjy nollar ýok;
  • 0 - san az sanly bolsa-da, mydama görkezilýär (bu ýagdaýda 0 görkezilýär);
  • . - onluk bölüji belgi;
  • , - bölüji toparlaşdyryş belgisi (mysal üçin, müňlerçe bölüji);
  • ; - formatlary bölýär;
  • - - otrisatel sanyň prefiksini belleýär;
  • % - 100-e köpeldýär we san göterim hökmünde görkezýär;
  • ? - 1000-e köpeldýär we ppm-de san görkezýär;
  • E - Ylmy bellik üçin mantisany we eksponenti bölýär.
Geliň, birnäçe mysallara göz aýlalyň:
System.out.println(new DecimalFormat( "###,###.##" ).format(74554542.224463));
Konsol çykyşy:
74,554,542.22
System.out.println(new DecimalFormat( "%###.##" ).format(0.723456));
Konsol çykyşy:
% 72.35
System.out.println(new DecimalFormat( "000.###" ).format(42.224463));
Konsol çykyşy:
042.224
Täze şablony kesgitlemek üçin her gezek täze “DecimalFormat” obýektini döretmek hökman däl. “AppPattern” -i ulanmak we “LocalizedPattern” usullaryny ulanmak ýeterlik bolar :
DecimalFormat dF = new DecimalFormat("###.###");
dF.applyPattern("000000.000");
dF.applyLocalizedPattern("#,#00.0#");
Floüzýän nokat belgisini formatlamak barada aýdanymyzda, tegeleklemek bilen gyzyklanýarys, şeýlemi? Şeýlelik bilen, görkezilen nagyşdan daşgary onluk ýerler bilen bir san kesilende, soňky kesilen san 5-den köp bolsa, “DecimalFormat” sanlary tegelekleýär, iň soňky kesilen san 5 bolsa näme etmeli? Hakykatdanam, bu ýagdaýda bu san iň ýakyn bitewi sanlaryň arasynda. Java-da sanlaryň çykyşyny formatlaň - 3Bu ýagdaýda öňki san göz öňünde tutulýar. Öňki san deň bolsa, tegelek edilýär:
DecimalFormat dF = new DecimalFormat("##.###");
String result = dF.format(56.4595);
System.out.println((result));
Konsol çykyşy:
56,459
Geň bolsa, ýerine ýetirilmeýär:
DecimalFormat dF = new DecimalFormat("##.###");
String str = dF.format(56.4595);
System.out.println((str));
Konsol çykyşy:
56,459
“String.format” () we “DecimalFormat.format” () ulanyp, ýüzýän nokat sanlaryny formatlamagyň arasyndaky tapawut, bölekleýin bölek bolmasa-da, birinji ýagdaýda yzky nollaryň bolmagydyr. Mysal üçin:
String firstStr = String.format("%.4f", 9.00001273);
System.out.println((firstStr));
Konsol çykyşy:
9.0000
DecimalFormat decimalFormat = new DecimalFormat("#.####");
String secondStr = decimalFormat.format(9.00001273);
System.out.println((secondStr));
Konsol çykyşy:
9
Görşüňiz ýaly, 9.00001273 belgisini dört onluk ýeriň takyklygy bilen format edeniňizde, String synpynyň formaty () usuly 9.0000 bahasyny çykarar , “DecimalFormat” -yň şuňa meňzeş formasy () usuly 9 çykar .

BigDecimal we BigInteger

Java-da sanlary tegeleklemek mowzugyna degenimizden soň, BigDecimal synpyny şeýle amallar üçin nädip ulanmalydygy barada gürleşeliň . Bu synp hakykatdanam LARGE sanlary bilen işlemäge gönükdirilendir: munuň üçin iň ýokary goşa we ýüzýän bahalar gaty az. Bu synpda ýüzýän nokatlary tegeleklemek üçin dürli sazlamalar, arifmetiki amallar üçin köp usul bar. Şuňa meňzeş synp bar, ýöne LARGE bitewi - BigInteger bilen işlemäge gönükdirilendir . BigDecimal we BigInteger hakda has giňişleýin maglumaty şu makalada okap bilersiňiz .

Sene we wagty formatlamak

Diňe ýokarda String synpynyň formatyny () ulanyp , wagt we senäni formatlap bilersiňiz. Bolýar, nähili edilendigine göz aýlalyň. Ilki bilen, % t format kesgitleýjiniň seneler üçin ulanylýandygyny ýatladýarys . Ikinjiden, şablon formatlananda, seneler üçin her format kesgitleýjisi üçin goşmaça formatlaýyş baýdaklary talap edilýär. Ine, seneler üçin mümkin bolan baýdaklary formatlamak:Java-da sanlaryň çykyşyny formatlaň - 4
Baýdaklar Düşündiriş
% tB Aýyň doly ady, mysal üçin ýanwar, fewral we ş.m.
% tb Aýyň gysgaldylan ady, mysal üçin, Jan, Fewral we ş.m.
% tA Hepdäniň gününiň doly ady, mysal üçin, ýekşenbe, duşenbe
% ta Hepdäniň gününiň gysgaldylan ady, mysal üçin Gün, Duş we ş.m.
% tY 4 sanly formatda ýyl, mysal üçin 0000-den 9999-a çenli
% ty 2 sanly formatda ýyl, mysal üçin 00-dan 99-a çenli
% tm Aý başynda nol bilen formatlanýar, mysal üçin 01-den 12-e çenli
% tc Sene we wagt% ta% tb% td% tT% tZ% tY, mysal üçin, Duşenbe 17 Fewral 03:56:12 PST 2020
% tD Sene% tm /% td /% ty formatda
% td Aýyň güni iki sanly görnüşde, mysal üçin 01-den 31-e çenli
% te Aýyň güni 0-dan öňe geçmän, mysal üçin 1-den 31-e çenli
% tT 24 sagatlyk wagt, mysal üçin% tH:% tM:% tS
% tH Günüň sagady 24-den 23-e çenli
% tI 12 sagatlyk formatda günüň sagady, meselem 01-den 12-e çenli
% tM Sagadyň minutlary öňdebaryjy nol bilen formatlanýar, mysal üçin 00-dan 59-a çenli
% tS Bir minutda sekunt, iki sandan ybarat, meselem, 00-dan 59-a çenli
% tZ PST, UTC we ş.m. ýaly wagt zonasynyň gysgaldylyşy.
Bu, mümkin bolan senäni formatlaşdyrýan baýdaklaryň gysgaldylan sanawy - her tagam üçin gaty köp. Bularyň doly sanawyny we mümkin kesgitleýjileri şu baglanyşykdan tapyp bilersiňiz . Muny nädip ulanmalydygyna seredeliň. Bu gezek String.format () ulanamzok , derrew System.out.printf () ulanýarys .

Mysal 1

Mundan başga-da, netijäniň dilini usula ilkinji argument hökmünde geçireris:
Date date = new Date();
System.out.printf(Locale.ENGLISH,"%tB %te, %tY",date,date,date);
Konsol çykyşy:
2020-nji ýylyň 11-nji oktýabry
Dil görkezmezden, adaty dil ulanylar (mysal üçin, rus dilinde).

Mysal 2

Has doly senäni görkezeliň:
Date date = new Date();
System.out.printf("%td %tB %tY of %n%tH:%tM:%tS",date,date,date,date,date,date,date);
Konsolda çykyş:
11 Oktýabr 2020 13:43:22
Şol bir Sene obýektini argument hökmünde ençeme gezek geçmek ... Gaty gowy görünmeýär, şeýlemi? Ulanmak isleýän argumentimizi kesgitlemek üçin $ içerki bölegi ulanalyň :
System.out.printf("%1$td %1$tB %1$tY of year %n%1$tH:%1$tM:%1$tS",date);
Konsolumyzdaky çykyş üýtgemez. Sene formatlamagyň başga-da gyzykly usullary bar. Bu materialda olar hakda we Java-da wagt we sene hakda birneme maglumat okap bilersiňiz . Bularyň hemmesi şu gün üçin, üns bereniňiz üçin sag boluň!Java-da sanlaryň çykyşyny formatlaň - 5
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION