JavaRush /Блоги Java /Random-TG /Натиҷаи рақамҳоро дар Java формат кунед

Натиҷаи рақамҳоро дар Java формат кунед

Дар гурӯҳ нашр шудааст
Салом ба ҳама! Аксар вақт усулҳои мо бо рақамҳое меоянд, ки бояд дар ягон формати махсус намоиш дода шаванд. Чунин ба назар мерасад, ки як чизи хурд аст, аммо шумо ин вазифаро чӣ гуна иҷро мекардед? Формат кардани баромади рақамҳо дар Java - 1Мо шуморо даъват менамоем, ки имрӯз дар ин бора каме фикр кунед. Аввалан, барои ворид шудан ба форматкунии рақамҳо дар Java, биёед усули формати синфи String -ро ба ёд орем : формати умумии статикии String(формати сатр, Объект... args) - сатри форматро аз сатри формат бо истифода аз аргументҳои боқимондаи args бармегардонад . Ва танҳо як мисол:
String str = String.format("Hi - %s! How are you %s?", "Sasha", "At work");
System.out.println(str);
Дар натиҷа, мо натиҷаро дар консол мегирем:
Салом Саша! Корҳо чӣ гунаанд?

Усулҳои printf ва формат

String.format() ягона усули форматкунии сатр нест. Аналогҳои он System.out.printf() ва System.out.format(); . Ҳамин тавр, мо метавонем рамзи қаблиро бо: иваз кунем:
System.out.printf("Hi - %s! How are you %s?", "Sasha", "At work");
ё
System.out.format("Hi - %s! How are you %s?", "Sasha", "At work");
Натиҷаи дар консол ҳамон боқӣ мемонад. Ягона фарқият дар он аст, ки ин усулҳо бар хилофи String.format() арзишро дар консол фавран намоиш медиҳанд . Аммо ба ман String.format() бештар маъқул аст, зеро ба мо на ҳамеша лозим аст, ки натиҷаро дар консол намоиш диҳем, аз ин рӯ мо ин усулро минбаъд истифода хоҳем кард. Биёед ба мисоли худ баргардем. Мо чиро мебинем? Гап дар сари он аст, ки дар чойхое, ки персонажхо — %s буданд , сатрхои «Саша» ва «дар кор» гузошта шудаанд . Чӣ тавр ин ба мо дар рушд кӯмак карда метавонад? Тасаввур кунед, ки шумо матни қолаби калон доред, аммо дар баъзе ҷойҳо ба шумо лозим аст, ки арзишҳое ворид кунед, ки метавонанд гуногун бошанд ва ҳамчун далелҳо аз берун меоянд. Дар ин ҷо ин форматкунӣ муфид аст. Мушаххаскунакҳои формат бо аломати фоиз, % оғоз мешаванд ва бо аломате анҷом меёбанд, ки намуди аргументи форматшавандаро нишон медиҳад. Ва, тавре ки шумо эҳтимол дарк мекунед, %s барои ворид кардани an objectҳо - сатрҳо истифода мешавад. Аммо агар мо кӯшиш кунем, ки масалан, дукаратаро ба ҷойе, ки an objectи сатр сабт шудааст, ворид кунем:
String str = String.format("Hi - %s! How are you %s?", 55.6, "At work");
ин хам кор мекунад. double ба сатр андохта мешавад ва мо мегирем:
Салом - 55,6! Корҳо чӣ гунаанд?
Ба ғайр аз сатрҳо ва рақамҳои шинокунандаи нуқтаи шинокунанда, дар Java намудҳои дигар мавҷуданд, дуруст? Пас, биёед ба тамоми арсенал назар андозем:
Навъи арзиш барои формат Мисол
%s Ҳар навъе, ки ба сатр интиқол дода мешавад
String.format("Hi %s!","world")
Натиҷа:
Салом Ҷаҳон!
Ҳар навъе, ки ба логикӣ интиқол дода мешавад : true - агар арзиш сифр набошад, бардурӯғ - агар нул бошад
String.format("Hi %b!",null)
Натиҷа:
Салом дурӯғ
Шумо метавонед ҳама гуна an objectеро гузаронед, ки аз усули hashCode() ба сатри арзиши шонздаҳӣ интиқол дода мешавад
String.format("Hi %h!","world")
Натиҷа:
Салом 106c44!
%c Барои муайян кардани аломати Юниcode ( char ) истифода мешавад
String.format("Hello m%cr!",'And')
Натиҷа:
Салом Ҷаҳон!
Шумораи бутун муайян карда шудааст ( int. byte, short, int, long, BigInteger )
String.format("I'm already %d!",20)
Натиҷа:
Ман аллакай 20-солаам!
% f Барои муайян кардани рақами нуқтаи шинокунанда истифода мешавад
String.format("PI is - %f!", 3.14159)
Натиҷа:
Рақами PI - 3.141590!
Рақамҳои нуқтаи шинокунанда дар қайди илмӣ
String.format("PI is - %e!", 3.14159);
Натиҷа:
Рақами PI - 3.141590e+00!
Рақамҳои нуқтаи шинокунанда дар шонздаҳӣ нишон дода мешаванд
String.format("PI is - %a!", 3.14159)
Натиҷа:
Рақами PI - 0x1.921f9f01b866ep1!
Адидаи бутун гузаронида мешавад ( int. byte, short, int, long, BigInteger ), натиҷаи форматкунӣ аломати рақами додашуда дар ҷадвали ASCII хоҳад буд.
String.format("I'm already %x!",25)
Натиҷа:
Ман аллакай 19-солаам!
Адидаи бутун ( int. byte, кӯтоҳ, int, long, BigInteger ) қабул карда мешавад ва ҳамчун адади ҳаштгона муаррифӣ мешавад
String.format("I already %o!",25);
Натиҷа:
Ман аллакай 31-солаам!
Префикс барои табдor сана ва вақт. Барои форматкунӣ парчамҳои иловагӣ лозиманд
String.format("Today is %tA",new Date())
Натиҷа:
Имрӯз шанбе аст
Ҷудокунаки хати мушаххаси платформа. Аналогӣ\n
String.format("Hello %n Hello")
Натиҷа:
Салом Салом
Биёед формати мувофиқтарро барои double истифода барем:
String str = String.format("The distance from Kyiv to Odessa is %f. Not so short, is it?", 475.4d);
System.out.println(str);
Натиҷаи консол:
Масофа аз Киев то Одесса 475.400000 аст. На он қадар кам, дуруст?
Тавре ки шумо шояд дарк кардаед, %f барои рақамҳои нуқтаҳои шинокунанда, ки намудҳои додаҳо ба монанди double ва float дар Java дохил мешаванд, мувофиқтар хоҳад буд . Бо ин мушаххаскунанда мо метавонем рақами нуқтаи шинокунандаро формат кунем:
String str = String.format("The distance from Kyiv to Odessa is %.2f. Not so short, is it?", 475.4d);
Ворид кардани .2 ба ин мушаххаскунанда шумораи ададҳои даҳиро ба ду кам карда, ба мо натиҷа медиҳад:
Масофа аз Киев то Одесса 475,40 аст. На он қадар кам, дуруст?
.2 ягона твик барои мушаххаскунанда нест. Маҷмӯи ин зербандҳо дастур номида мешавад . Формат кардани баромади рақамҳо дар Java - 2Шакли умумии дастурҳо чунин аст:
%[argument_index][парчамҳо][width][.precision]муайянкунандаи навъи
Акнун биёед ҳама чизро бо тартиби дешифрӣ кунем:
  • [argument_index] адади бутунест, ки мавқеъро дар рӯйхати аргументҳо нишон медиҳад. Масалан, истинод ба далели аввал $1 аст, пайванд ба далели дуюм $2 ва ғайра. Агар мавқеъ муайян нашуда бошад, аргументҳо бояд дар ҳамон тартибе бошанд, ки онҳо дар сатри формат истинод карда мешаванд.
  • [парчамҳо] аломатҳои махсус барои форматкунӣ мебошанд. Барои намуна:
    • + парчам, ки нишон медиҳад, ки агар арзиши ададӣ мусбат бошад, он бояд аломати + дошта бошад
    • - маънои онро дорад, ки натиҷа ба тарафи чап мувофиқ карда шавад
    • , ҷудокунандаи ҳазорҳо барои ададҳои бутунро муқаррар мекунад
  • [width] адади мусбии даҳӣ аст, ки шумораи ҳадди ақали аломатҳои баровардашударо муайян мекунад. Агар дар пеши ин адад 0 бошад, пас аломатҳои гумшуда бо 0, агар 0 набошад, пас бо фосила пур карда мешаванд.
  • [.accuracy] адади ғайриманфӣ аст, ки дар пеш нуқта гузошта мешавад. Одатан барои маҳдуд кардани шумораи аломатҳо истифода мешавад. Рафтори мушаххас аз намуди мушаххаси мушаххас вобаста аст.
Ман инчунин мехоҳам қайд намоям, ки ҳамаи унсурҳои дар боло зикршудаи дастурҳо ихтиёрӣ мебошанд ва ҳама чиз бе онҳо кор хоҳад кард. Ҳамчун мисоли истифодаи зергурӯҳҳо, биёед тасаввур кунем, ки ба мо натиҷаи мушаххаси рақами Pi лозим аст:
String str = String.format("%1$+09.5f", 3.1415926535897);
System.out.print(str);
Ва мувофиқан, натиҷа дар консол:
+03.14159
Ба назар осон аст, дуруст? Аммо вақте ки сухан дар бораи формат кардани рақам меравад, шумо наметавонед DecimalFormat -ро сарфи назар кунед . Биёед бифаҳмем, ки ин чӣ маъно дорад.

Формати даҳӣ

DecimalFormat синф барои формат кардани ҳама гуна адад дар Java аст, хоҳ он адади бутун ё рақами шинокунанда бошад. Вақте ки an objectи DecimalFormat сохта мешавад , шумо метавонед қолабро барои формат кардани рақамҳои воридотӣ мустақиман дар созанда муайян кунед. Ин аст он чизе ки мисоли мо бо истифода аз DecimalFormat монанд аст :
DecimalFormat dF = new DecimalFormat( "#.###" );
double value = 72.224463;
System.out.print(dF.format(value));
Натиҷаи консол:
72,224
Сатри #.### намунаест, ки нишон медиҳад, ки мо арзиши додашударо ба 3 адад даҳӣ формат карда истодаем. Барои намунаҳо боз кадом рамзҳо мавҷуданд? Дар ин ҷо баъзе аз онҳо ҳастанд:
  • # — рақам, сифрҳои пешбаранда партофта шудаанд;
  • 0 — рақам ҳамеша намоиш дода мешавад, ҳатто агар адад рақамҳои камтар дошта бошад (дар ин ҳолат 0 нишон дода мешавад);
  • . — аломати ҷудокунандаи даҳӣ;
  • , — аломати гурӯҳбандии ҷудокунанда (масалан, ҷудокунандаи ҳазорҳо);
  • ; — форматҳоро ҷудо мекунад;
  • - — префикси адади манфиро қайд мекунад;
  • % - ба 100 зарб мезанад ва ададро бо фоиз нишон медиҳад;
  • ? — ба 1000 зарб зада, ададро дар ppm нишон медихад;
  • E - Мантисса ва экспонентро барои қайди илмӣ ҷудо мекунад.
Биёед ба чанд мисол назар андозем:
System.out.println(new DecimalFormat( "###,###.##" ).format(74554542.224463));
Натиҷаи консол:
74,554,542,22
System.out.println(new DecimalFormat( "%###.##" ).format(0.723456));
Натиҷаи консол:
72,35%
System.out.println(new DecimalFormat( "000.###" ).format(42.224463));
Натиҷаи консол:
042.224
Барои муайян кардани қолаби нав ҳар дафъа an objectи нави DecimalFormat эҷод кардан лозим нест. Истифодаи усулҳои applicationPattern ва applyLocalizedPattern он кифоя хоҳад буд :
DecimalFormat dF = new DecimalFormat("###.###");
dF.applyPattern("000000.000");
dF.applyLocalizedPattern("#,#00.0#");
Вақте ки мо дар бораи формат кардани рақами нуқтаи шинокунанда гап мезанем, мо ба яклухткунӣ хеле манфиатдорем, ҳамин тавр не? Ҳамин тавр, ҳангоми буридани адад бо ҷойҳои даҳии берун аз намунаи муқарраршуда, DecimalFormat ададро ба боло давр мезанад, агар рақами охирини буридашуда аз 5 зиёд бошад. Чӣ бояд кард, агар рақами охирин буридашуда 5 бошад? Дар ҳақиқат, дар ин ҳолат, ин рақам маҳз дар мобайни байни ададҳои наздиктарин ҷойгир аст. Формат кардани баромади рақамҳо дар Java - 3Дар ин маврид шумораи пештара ба назар гирифта мешавад. Агар рақами қаблӣ ҷуфт бошад, яклухткунӣ анҷом дода мешавад:
DecimalFormat dF = new DecimalFormat("##.###");
String result = dF.format(56.4595);
System.out.println((result));
Натиҷаи консол:
56,459
Агар тоқ бошад, он иҷро намешавад:
DecimalFormat dF = new DecimalFormat("##.###");
String str = dF.format(56.4595);
System.out.println((str));
Натиҷаи консол:
56,459
Тафовут байни формат кардани рақамҳои нуқтаи шинокунанда бо истифода аз String.format() ва DecimalFormat.format() дар он аст, ки дар ҳолати аввал сифрҳои паси он хоҳанд буд, ҳатто агар қисми касрӣ вуҷуд надошта бошад. Барои намуна:
String firstStr = String.format("%.4f", 9.00001273);
System.out.println((firstStr));
Натиҷаи консол:
9.0000
DecimalFormat decimalFormat = new DecimalFormat("#.####");
String secondStr = decimalFormat.format(9.00001273);
System.out.println((secondStr));
Натиҷаи консол:
9
Тавре ки шумо мебинед, ҳангоми формат кардани рақами 9.00001273 бо дақиқии чаҳор адади даҳӣ, усули format() синфи String арзиши 9.0000 , дар ҳоле ки усули шабеҳи формати() DecimalFormat 9 мебарорад .

BigDecimal ва BigInteger

Азбаски мо ба мавзӯи яклухткунии рақамҳо дар Java дахл кардем, биёед дар бораи чӣ гуна истифода бурдани синфи BigDecimal барои чунин амалҳо сӯҳбат кунем . Ин синф ба кор бо рақамҳои воқеан КАЛОН нигаронида шудааст: барои он, арзишҳои максималии дукарата ва шинокунанда хеле хурд мебошанд. Ин синф дорои бисёр танзимоти гуногун барои яклухткунии нуқтаи шинокунанда ва инчунин усулҳои зиёди амалҳои арифметикӣ мебошад. Он дорои синфи шабеҳ аст, аммо ба кор бо ададҳои LONG - BigInteger нигаронида шудааст . Шумо метавонед бештар дар бораи BigDecimal ва BigInteger дар ин мақола хонед .

Формат кардани сана ва вақт

Танҳо дар боло зикр шуд, ки бо истифода аз format() синфи String шумо метавонед вақт ва санаро низ формат кунед. Формат кардани баромади рақамҳо дар Java - 4Хуб, биёед бубинем, ки он чӣ гуна иҷро шудааст. Аввалан, мо ба шумо хотиррасон мекунем, ки мушаххаскунандаи формати %t барои санаҳо истифода мешавад . Дуюм, ҳангоми формат кардани қолаб, барои ҳар як мушаххаскунандаи формат барои санаҳо парчамҳои иловагии форматкунӣ талаб карда мешаванд. Инҳоянд парчамҳои имконпазири форматкунии санаҳо:
Парчамҳо Тавсифи
%тБ Номи пурраи моҳ, масалан, январ, феврал ва ғайра.
%тб Номи мухтасари моҳ, масалан, январ, феврал ва ғайра.
%тА Номи пурраи рӯзи ҳафта, масалан, якшанбе, душанбе
%та Номи мухтасари рӯзи ҳафта, масалан, Офтоб, Дш ва ғ.
%tY Сол дар формати 4 рақам, масалан аз 0000 то 9999
%ty Сол дар формати 2-рақама, масалан, аз 00 то 99
%tm Моҳ дар ибтидо бо сифр формат карда мешавад, масалан аз 01 то 12
%tc Сана ва вақт дар формати %ta %tb %td %tT %tZ %tY, масалан, Дш 17 феврал 03:56:12 PST 2020
%tD Сана дар формати %tm/%td/%ty
%td Рӯзи моҳ дар формати ду рақам, масалан аз 01 то 31
%те Рӯзи моҳ дар формати бе пешбари 0, масалан аз 1 то 31
%tT Вақт дар формати 24 соат, масалан %tH:%tM:%tS
%tH Соатҳои рӯз дар формати 24 соат, аз 00 то 23
%tI Соатҳои рӯз барои формати 12 соат, масалан, аз 01 то 12
%tM Дақиқаҳо дар соат бо сифри пешбаранда формат карда мешаванд, масалан аз 00 то 59
%tS Сонияҳо дар як дақиқа, ки аз ду рақам иборатанд, масалан, аз 00 то 59
%tZ Ихтисороти минтақаи вақт, ба монанди PST, UTC ва ғайра.
Ин рӯйхати кӯтоҳшудаи парчамҳои имконпазири форматкунии сана аст - шумораи зиёди онҳо барои ҳар завқ мавҷуданд. Рӯйхати пурраи онҳо ва мушаххасоти эҳтимолиро дар ин пайванд пайдо кардан мумкин аст . Биёед бубинем, ки ин чӣ гуна истифода мешавад. Ин дафъа мо String.format() -ро истифода намебарем , аммо фавран System.out.printf() -ро истифода мебарем .

Мисол 1

Илова бар ин, мо забони натиҷаро тавассути интиқоли он ҳамчун далели аввал ба усул муқаррар мекунем:
Date date = new Date();
System.out.printf(Locale.ENGLISH,"%tB %te, %tY",date,date,date);
Натиҷаи консол:
11 октябри соли 2020
Бе нишон додани забон, забони пешфарз истифода мешавад (масалан, ман русӣ дорам).

Мисол 2

Биёед санаи пурратарро нишон диҳем:
Date date = new Date();
System.out.printf("%td %tB %tY of %n%tH:%tM:%tS",date,date,date,date,date,date,date);
Ва натиҷа дар консол:
11 октябри соли 2020 13:43:22
Гузаронидани як an objectи Date чанд маротиба ба сифати далел... Ин хеле хуб ба назар намерасад, ҳамин тавр-не? Биёед зермаҷмӯаи дохorи $ -ро истифода барем , то далелеро, ки мо истифода мебарем, муайян кунем:
System.out.printf("%1$td %1$tB %1$tY of year %n%1$tH:%1$tM:%1$tS",date);
Натиҷа дар консоли мо тағир намеёбад. Роҳҳои дигари ҷолиб барои формат кардани санаҳо мавҷуданд. Шумо метавонед дар бораи онҳо ва каме бештар дар бораи вақт ва сана дар Java дар ин мавод хонед . Ин ҳама барои имрӯз аст, ташаккур барои таваҷҷӯҳатон!Натиҷаи рақамҳоро дар Java - 5 формат кунед
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION