JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ انگن جي پيداوار کي فارميٽ ڪريو

جاوا ۾ انگن جي پيداوار کي فارميٽ ڪريو

گروپ ۾ شايع ٿيل
هيلو سڀ! گهڻو ڪري اسان جا طريقا انگن سان گڏ ايندا آهن جيڪي ڪجهه خاص شڪل ۾ ظاهر ٿيڻ گهرجن. اهو هڪ ننڍڙي شيء وانگر لڳي ٿو، پر توهان هن ڪم کي ڪيئن لاڳو ڪندا؟ جاوا ۾ انگن جي پيداوار کي فارميٽ ڪريو - 1اسان توهان کي دعوت ڏيون ٿا ته اڄ ان بابت ٿورو غور ڪريو. پهرين، جاوا ۾ نمبر فارميٽنگ ۾ غوطا هڻڻ لاءِ، اچو ته ياد رکون فارميٽ جو طريقو String ڪلاس جي : public static String format(String format, Object... args) - باقي args arguments استعمال ڪندي فارميٽ واري اسٽرنگ مان فارميٽ ٿيل اسٽرنگ موٽائي ٿو . ۽ صرف هڪ مثال:
String str = String.format("Hi - %s! How are you %s?", "Sasha", "At work");
System.out.println(str);
نتيجي طور، اسان ڪنسول ۾ پيداوار حاصل ڪنداسين:
هيلو ساشا! ڪم تي شيون ڪيئن آهن؟

پرنٽ ۽ فارميٽ جا طريقا

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 استعمال ڪيو ويندو آھي شيون داخل ڪرڻ لاءِ - تار. پر جيڪڏهن اسان داخل ڪرڻ جي ڪوشش ڪندا، مثال طور، هڪ ٻيڻو جاء تي جتي string اعتراض رجسٽر ٿيل آهي:
String str = String.format("Hi - %s! How are you %s?", 55.6, "At work");
اهو پڻ ڪم ڪندو. ڊبل هڪ تار تي اڇلائي ويندي ۽ اسان حاصل ڪنداسين:
هيلو - 55.6! ڪم تي شيون ڪيئن آهن؟
تارن ۽ سچل پوائنٽ نمبرن کان علاوه، جاوا ۾ ٻيا به قسم آهن، صحيح؟ تنهن ڪري اچو ته سڄي هٿيارن تي هڪ نظر رکون:
فارميٽ ۾ قدر جو قسم مثال
%s ڪنهن به قسم جو جيڪو تار ۾ اڇلايو ويندو
String.format("Hi %s!","world")
نتيجو:
هيلو دنيا!
%b ڪو به قسم جيڪو بولان ۾ اڇلايو ويندو : سچو - جيڪڏھن قدر ناھي، غلط - جيڪڏھن نال
String.format("Hi %b!",null)
نتيجو:
هيلو ڪوڙو
% ايڇ توھان ڪنھن شئي کي پاس ڪري سگھو ٿا، جنھن کي hashCode() طريقي مان ھيڪساڊيڪل ويليو اسٽرنگ ڏانھن اڇلايو ويندو
String.format("Hi %h!","world")
نتيجو:
هيلو 106c44!
%c يونيڪوڊ اکر بيان ڪرڻ لاءِ استعمال ڪيو ويو ( char )
String.format("Hello m%cr!",'And')
نتيجو:
هيلو دنيا!
%d هڪ انٽيجر بيان ڪيو ويو آهي ( 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!
%e سائنسي نوٽيفڪيشن ۾ سچل پوائنٽ نمبر
String.format("PI is - %e!", 3.14159);
نتيجو:
PI نمبر آهي - 3.141590e+00!
%a فلوٽنگ پوائنٽ نمبر هيڪساڊيڪل ۾ ظاھر ڪيا ويندا
String.format("PI is - %a!", 3.14159)
نتيجو:
PI نمبر آهي - 0x1.921f9f01b866ep1!
%x هڪ عدد پاس ڪيو ويو آهي ( int. byte, short, int, long, BigInteger )، فارميٽنگ جو نتيجو ASCII ٽيبل ۾ ڏنل نمبر سان ڪردار هوندو.
String.format("I'm already %x!",25)
نتيجو:
مان پهريان ئي 19 آهيان!
%o هڪ عدد ( int. byte, short, int, long, BigInteger ) قبول ڪيو ويندو آهي ۽ هڪ آڪٽل نمبر طور پيش ڪيو ويندو
String.format("I already %o!",25);
نتيجو:
مان اڳ ۾ ئي 31 آهيان!
%t تاريخ ۽ وقت جي تبديلين لاءِ اڳياڙي. فارميٽنگ لاءِ اضافي جھنڊا گھربل آھن
String.format("Today is %tA",new Date())
نتيجو:
اڄ ڇنڇر آهي
%n پليٽ فارم-مخصوص لائين جدا ڪندڙ. اينالاگ\n
String.format("Hello %n Hello")
نتيجو:
هاءِ هاءِ
اچو ته ڊبل لاءِ وڌيڪ مناسب فارميٽ استعمال ڪريون:
String str = String.format("The distance from Kyiv to Odessa is %f. Not so short, is it?", 475.4d);
System.out.println(str);
ڪنسول آئوٽ:
Kyiv کان Odessa جو فاصلو 475.400000 آهي. ايترو ننڍڙو نه، صحيح؟
جيئن توهان محسوس ڪيو هوندو، %f سچل پوائنٽ نمبرن لاءِ وڌيڪ مناسب وضاحت ڪندڙ هوندو، جنهن ۾ جاوا ۾ ڊبل ۽ فلوٽ وانگر ڊيٽا جا قسم شامل آهن. هن وضاحت ڪندڙ سان اسان هڪ سچل پوائنٽ نمبر فارميٽ ڪري سگهون ٿا:
String str = String.format("The distance from Kyiv to Odessa is %.2f. Not so short, is it?", 475.4d);
هن وضاحت ڪندڙ ۾ .2 داخل ڪرڻ سان اعشاريه جي جڳهن جي تعداد کي ٻن تائين گھٽائي ڇڏيندو، اسان کي پيداوار ڏيو:
Kyiv کان اوڊيسا تائين فاصلو 475.40 آهي. ايترو ننڍڙو نه، صحيح؟
.2 صرف وضاحت ڪندڙن کي ٽوڪ ناهي. انهن ذيلي سيٽنگن جي ميلاپ کي هدايت سڏيو ويندو آهي . هدايتن جيجاوا - 2 ۾ انگن جي پيداوار کي فارميٽ ڪريو عام شڪل هن ريت آهي:
%[argument_index][flags][width][.precision]قسم جي وضاحت ڪندڙ
هاڻي اچو ته هر شي کي ترتيب سان ترتيب ڏيو:
  • [argument_index] هڪ عدد عدد آهي جيڪو دليل جي فهرست ۾ پوزيشن کي ظاهر ڪري ٿو. مثال طور، پهرين دليل جي لنڪ $1 آهي، ٻئي دليل جي لنڪ $2 آهي، وغيره. جيڪڏهن پوزيشن بيان نه ڪئي وئي هئي، دليلن کي ساڳئي ترتيب ۾ هجڻ گهرجي جيئن اهي فارميٽ اسٽرنگ ۾ حوالي ڪيا ويا آهن.
  • [flags] فارميٽنگ لاءِ خاص اکر آھن. مثال طور:
    • + پرچم اشارو ڪري ٿو ته جيڪڏهن هڪ عددي قدر مثبت آهي، ان ۾ هڪ + نشان شامل ٿيڻ گهرجي
    • - مطلب ته نتيجو کي کاٻي طرف ترتيب ڏيو
    • ، انٽيجرز لاءِ هزار جدا ڪندڙ مقرر ڪري ٿو
  • [width] ھڪ مثبت decimal integer آھي جيڪو بيان ڪري ٿو گھٽ ۾ گھٽ اکر جو تعداد جيڪو ٻاھر ٿيندو. جيڪڏهن هن نمبر جي اڳيان 0 آهي، ته غائب اکر 0 سان ڀريل هوندا، جيڪڏهن 0 نه آهي، پوء اسپيس سان.
  • [. accuracy] هڪ غير منفي عدد آهي جيڪو هڪ نقطي کان اڳ هوندو آهي. عام طور تي اکرن جي تعداد کي محدود ڪرڻ لاء استعمال ڪيو ويندو آهي. مخصوص رويي جو دارومدار مخصوص قسم جي وضاحت ڪندڙ تي آهي.
مان اهو پڻ نوٽ ڪرڻ چاهيان ٿو ته هدايتن جا مٿيان سڀئي عنصر اختياري آهن، ۽ هر شيء انهن کان سواء ڪم ڪندي. ذيلي سيٽنگون استعمال ڪرڻ جي هڪ مثال جي طور تي، اچو ته تصور ڪريون ته اسان کي پي نمبر جي مخصوص پيداوار جي ضرورت آهي:
String str = String.format("%1$+09.5f", 3.1415926535897);
System.out.print(str);
۽ مطابق، ڪنسول ۾ ٻاھر نڪتو:
+03.14159
لڳي ٿو آسان، صحيح؟ پر جڏهن اهو هڪ نمبر کي فارميٽ ڪرڻ لاء اچي ٿو، توهان نظر انداز نٿا ڪري سگهو DecimalFormat . اچو ته سمجهون ته ان جو مطلب ڇا آهي.

Decimal Format

DecimalFormat جاوا ۾ ڪنهن به نمبر کي فارميٽ ڪرڻ لاءِ هڪ ڪلاس آهي، چاهي اهو انٽيجر هجي يا فلوٽنگ پوائنٽ نمبر. جڏهن هڪ DecimalFormat اعتراض ٺاهيو ويندو آهي ، توهان سڌو سنئون تعمير ڪندڙ ۾ ايندڙ نمبرن کي فارميٽ ڪرڻ لاء ٽيمپليٽ بيان ڪري سگهو ٿا. اھو اھو آھي جيڪو اسان جو مثال DecimalFormat استعمال ڪندي نظر ايندو :
DecimalFormat dF = new DecimalFormat( "#.###" );
double value = 72.224463;
System.out.print(dF.format(value));
ڪنسول آئوٽ:
72,224
#.### لائن ھڪڙو نمونو آھي جيڪو ظاھر ڪري ٿو ته اسان منظور ٿيل قدر کي 3 ڊيسيمل جڳھن تي فارميٽ ڪري رھيا آھيون. نمونن لاءِ ٻيا ڪهڙا نشان موجود آهن؟ هتي انهن مان ڪجهه آهن:
  • # - انگ اکر، اڳوڻو صفر ختم ڪيا ويا آهن؛
  • 0 - انگ اکر هميشه ڏيکاريل آهي، جيتوڻيڪ انگ ۾ گهٽ انگ اکر آهن (هن صورت ۾، 0 ڏيکاريل آهي)؛
  • . - decimal separator sign؛
  • , - جدا ڪندڙ گروپ جي نشاني (مثال طور، هزارين جدا ڪندڙ)؛
  • ؛ - جدا جدا فارميٽ؛
  • - - هڪ منفي نمبر جي اڳڪٿي کي نشان لڳايو؛
  • % - 100 سان ضرب ڪري ٿو ۽ انگ ڏيکاري ٿو فيصد طور؛
  • ؟ - 1000 سان ضرب ڪري ٿو ۽ پي پي ايم ۾ نمبر ڏيکاري ٿو؛
  • 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
اهو ضروري ناهي ته هر وقت نئين ٽيمپليٽ جي وضاحت ڪرڻ لاءِ هڪ نئون DecimalFormat اعتراض ٺاهيو وڃي. اهو ڪافي هوندو استعمال ڪرڻ لاءِ ان جي ApplyPattern ۽ ApplyLocalizedPattern طريقن کي :
DecimalFormat dF = new DecimalFormat("###.###");
dF.applyPattern("000000.000");
dF.applyLocalizedPattern("#,#00.0#");
جڏهن اسان سچل پوائنٽ نمبر کي فارميٽ ڪرڻ بابت ڳالهايو ٿا، اسان کي گول ڪرڻ ۾ ڪافي دلچسپي آهي، ڇا اسان نه آهيون؟ تنهن ڪري، جڏهن ڪنهن نمبر کي ڪٽڻ واري ڏهاڪي جي جڳهن سان مخصوص نموني کان ٻاهر، DecimalFormat انگ کي گول ڪري ٿو جيڪڏهن آخري ٽرم ٿيل نمبر 5 کان وڏو آهي. ڇا ٿيندو جيڪڏهن آخري ٽرم ٿيل نمبر 5 آهي؟ درحقيقت، هن معاملي ۾، هي انگ بلڪل ويجھي انگن اکرن جي وچ ۾ آهي. جاوا - 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 کي چار ڊيسيمل جڳهن جي درستگي سان، اسٽرنگ ڪلاس جو فارميٽ() طريقو 9.0000 جي قيمت کي ٻاھر ڪڍندو ، جڏھن ته DecimalFormat جو ساڳيو فارميٽ() طريقو 9 کي ٻاھر ڪڍندو .

BigDecimal ۽ BigInteger

جيئن ته اسان جاوا ۾ rounding انگن جي موضوع تي رابطو ڪيو آهي، اچو ته ان بابت ڳالهايون ته ڪيئن استعمال ڪجي BigDecimal class اهڙي عملن لاءِ . هي ڪلاس واقعي وڏي انگن سان ڪم ڪرڻ تي مرکوز آهي: ان لاءِ، وڌ ۾ وڌ ڊبل ۽ فلوٽ ويلز تمام ننڍا آهن. ھن ڪلاس ۾ سچل پوائنٽ گول ڪرڻ لاءِ ڪيتريون ئي مختلف سيٽنگون آھن، گڏوگڏ رياضي جي عملن لاءِ ڪيترائي طريقا. اهو ساڳيو طبقو آهي، پر ڪم ڪرڻ تي ڌيان ڏنو ويو آهي LARGE integers - BigInteger . توهان هن مضمون ۾ BigDecimal ۽ BigInteger بابت وڌيڪ پڙهي سگهو ٿا .

فارميٽ ڪرڻ جي تاريخ ۽ وقت

اهو صرف مٿي ذڪر ڪيو ويو آهي ته فارميٽ () اسٽرنگ ڪلاس جي استعمال ڪندي توهان پڻ وقت ۽ تاريخ فارميٽ ڪري سگهو ٿا. جاوا - 4 ۾ انگن جي پيداوار کي فارميٽ ڪريوخير، اچو ته هڪ نظر رکون ته اهو ڪيئن ڪيو ويو آهي. پهرين، اسان توهان کي ياد ڏيارڻ چاهيون ٿا ته %t فارميٽ جي وضاحت ڪندڙ تاريخن لاءِ استعمال ٿئي ٿو . ٻيو، جڏهن هڪ ٽيمپليٽ فارميٽ ڪري، اضافي فارميٽنگ جھنڊا گهربل آهن هر فارميٽ جي وضاحت ڪندڙ لاءِ تاريخن لاءِ. هتي تاريخن لاءِ ممڪن فارميٽنگ پرچم آهن:
جھنڊو وصف
%tB مهيني جو پورو نالو، مثال طور، جنوري، فيبروري، وغيره.
%ٽي بي مهيني جو مختصر نالو، مثال طور، جان، فيبروري، وغيره.
%tA هفتي جي ڏينهن جو پورو نالو، مثال طور، آچر، سومر
%ta هفتي جي ڏينهن جو مختصر نالو، مثال طور، سج، سومر، وغيره.
%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 تائين
%te مهيني جو ڏينهن فارميٽ ۾ بغير 0 جي اڳواٽ، مثال طور 1 کان 31 تائين
ٽي ٽي وقت 24-ڪلاڪ فارميٽ ۾، مثال طور %tH:%tM:%tS
% ٽي ايڇ ڏينهن جا ڪلاڪ 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
ساڳئي تاريخ واري اعتراض کي ڪيترائي ڀيرا دليل طور پاس ڪرڻ... اهو تمام سٺو نٿو لڳي، ڇا؟ اچو ته استعمال ڪريون $ اندروني سبسٽ ان دليل کي بيان ڪرڻ لاءِ جنهن کي اسين استعمال ڪرڻ چاهيون ٿا:
System.out.printf("%1$td %1$tB %1$tY of year %n%1$tH:%1$tM:%1$tS",date);
اسان جي ڪنسول ۾ پيداوار تبديل نه ٿيندي. تاريخن کي فارميٽ ڪرڻ جا ٻيا به ساڳيا دلچسپ طريقا آهن. توھان انھن بابت پڙھي سگھو ٿا ۽ ھن مواد ۾ جاوا ۾ وقت ۽ تاريخ بابت ٿورو وڌيڪ . اهو سڀ ڪجهه اڄ لاءِ آهي، توهان جي توجه لاءِ مهرباني!جاوا - 5 ۾ انگن جي پيداوار کي فارميٽ ڪريو
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION