JavaRush /جاوا بلاگ /Random-UR /جاوا میں نمبروں کے آؤٹ پٹ کو فارمیٹ کریں۔

جاوا میں نمبروں کے آؤٹ پٹ کو فارمیٹ کریں۔

گروپ میں شائع ہوا۔
سب کو سلام! اکثر ہمارے طریقے ایسے نمبروں کے ساتھ آتے ہیں جنہیں کسی خاص فارمیٹ میں ظاہر کرنے کی ضرورت ہوتی ہے۔ یہ ایک چھوٹی سی چیز کی طرح لگتا ہے، لیکن آپ اس کام کو کیسے نافذ کریں گے؟ جاوا - 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 str = String.format("Hi - %s! How are you %s?", 55.6, "At work");
یہ بھی کام کرے گا. ڈبل ایک تار پر ڈالا جائے گا اور ہمیں ملے گا:
ہیلو - 55.6! کام پر چیزیں کیسی ہیں؟
سٹرنگز اور فلوٹنگ پوائنٹ نمبرز کے علاوہ جاوا میں دوسری قسمیں بھی ہیں، ٹھیک ہے؟ تو آئیے پورے ہتھیاروں پر ایک نظر ڈالتے ہیں:
فارمیٹ کے لیے قدر کی قسم مثال
%s کوئی بھی قسم جو سٹرنگ پر ڈالی جائے گی۔
String.format("Hi %s!","world")
نتیجہ:
ہیلو ورلڈ!
%b کوئی بھی قسم جو بولین میں ڈالی جائے گی : سچا - اگر قدر null نہیں ہے، غلط ہے - اگر null
String.format("Hi %b!",null)
نتیجہ:
ہیلو جھوٹا۔
%h آپ کسی بھی شے کو پاس کر سکتے ہیں، جسے 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!
٪ایکس ایک انٹیجر پاس کیا جاتا ہے ( 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);
کنسول آؤٹ پٹ:
کیف سے اوڈیسا کا فاصلہ 475.400000 ہے۔ اتنا چھوٹا نہیں، ٹھیک ہے؟
جیسا کہ آپ نے محسوس کیا ہو گا، %f فلوٹنگ پوائنٹ نمبرز کے لیے زیادہ مناسب وضاحت کنندہ ہوگا، جس میں جاوا میں ڈبل اور فلوٹ جیسے ڈیٹا کی قسمیں شامل ہیں۔ اس وضاحت کنندہ کے ساتھ ہم فلوٹنگ پوائنٹ نمبر کو فارمیٹ کر سکتے ہیں:
String str = String.format("The distance from Kyiv to Odessa is %.2f. Not so short, is it?", 475.4d);
اس اسپیسیفائر میں .2 داخل کرنے سے اعشاریہ کی تعداد کو دو کر دیا جائے گا، جس سے ہمیں آؤٹ پٹ ملے گا:
کیف سے اوڈیسا کا فاصلہ 475.40 ہے۔ اتنا چھوٹا نہیں، ٹھیک ہے؟
.2 وضاحت کرنے والوں کے لیے واحد موافقت نہیں ہے۔ ان سب سیٹنگز کے امتزاج کو انسٹرکشن کہا جاتا ہے ۔ ہدایات کیجاوا - 2 میں نمبروں کے آؤٹ پٹ کو فارمیٹ کریں۔ عمومی شکل حسب ذیل ہے:
%[argument_index][جھنڈے][width][.precision]type specifier
اب آئیے ہر چیز کو ترتیب سے سمجھیں:
  • [دلیل_انڈیکس] ایک عدد عدد ہے جو دلیل کی فہرست میں پوزیشن کو ظاہر کرتا ہے۔ مثال کے طور پر، پہلی دلیل کا لنک $1 ہے، دوسری دلیل کا لنک $2 ہے، وغیرہ۔ اگر پوزیشن کی وضاحت نہیں کی گئی تھی، تو دلائل اسی ترتیب میں ہونے چاہئیں جس طرح ان کا حوالہ فارمیٹ سٹرنگ میں دیا گیا ہے۔
  • [جھنڈے] فارمیٹنگ کے لیے خصوصی حروف ہیں۔ مثال کے طور پر:
    • + جھنڈا یہ بتاتا ہے کہ اگر کوئی عددی قدر مثبت ہے، تو اس میں + نشان شامل ہونا چاہیے۔
    • - کا مطلب ہے نتیجہ کو بائیں طرف سیدھ کریں۔
    • , عدد کے لیے ہزار الگ کرنے والا سیٹ کرتا ہے۔
  • [width] ایک مثبت اعشاریہ عدد ہے جو حروف کی کم از کم تعداد بتاتا ہے جو آؤٹ پٹ ہوں گے۔ اگر اس نمبر کے سامنے 0 ہے، تو گمشدہ حروف کو 0 کے ساتھ پیڈ کیا جائے گا، اگر 0 نہیں ہے، تو خالی جگہوں کے ساتھ۔
  • درستگی ایک غیر منفی عدد ہے جس سے پہلے ڈاٹ ہوتا ہے۔ عام طور پر حروف کی تعداد کو محدود کرنے کے لیے استعمال کیا جاتا ہے۔ مخصوص طرز عمل کا انحصار مخصوص قسم کے مخصوص کرنے والے پر ہوتا ہے۔
میں یہ بھی نوٹ کرنا چاہوں گا کہ ہدایات کے مندرجہ بالا تمام عناصر اختیاری ہیں، اور سب کچھ ان کے بغیر کام کرے گا۔ ذیلی ترتیبات کو استعمال کرنے کی ایک مثال کے طور پر، آئیے تصور کریں کہ ہمیں نمبر Pi کے مخصوص آؤٹ پٹ کی ضرورت ہے:
String str = String.format("%1$+09.5f", 3.1415926535897);
System.out.print(str);
اور اس کے مطابق، کنسول میں آؤٹ پٹ:
+03.14159
آسان لگتا ہے، ٹھیک ہے؟ لیکن جب نمبر فارمیٹ کرنے کی بات آتی ہے، تو آپ DecimalFormat کو نظر انداز نہیں کر سکتے ۔ آئیے جانتے ہیں کہ اس کا کیا مطلب ہے۔

ڈیسیمل فارمیٹ

DecimalFormat جاوا میں کسی بھی نمبر کو فارمیٹ کرنے کے لیے ایک کلاس ہے، چاہے وہ انٹیجر ہو یا فلوٹنگ پوائنٹ نمبر۔ جب DecimalFormat آبجیکٹ بن جاتا ہے ، تو آپ براہ راست کنسٹرکٹر میں آنے والے نمبروں کی فارمیٹنگ کے لیے ایک ٹیمپلیٹ بتا سکتے ہیں۔ DecimalFormat کا استعمال کرتے ہوئے ہماری مثال اس طرح نظر آئے گی :
DecimalFormat dF = new DecimalFormat( "#.###" );
double value = 72.224463;
System.out.print(dF.format(value));
کنسول آؤٹ پٹ:
72,224
#.### لائن ایک پیٹرن ہے جو اس بات کی نشاندہی کرتی ہے کہ ہم پاس شدہ ویلیو کو 3 ڈیسیمل مقامات پر فارمیٹ کر رہے ہیں۔ پیٹرن کے لیے کون سی دوسری علامتیں دستیاب ہیں؟ ان میں سے کچھ یہ ہیں:
  • # — ہندسہ، پہلے والے صفر کو چھوڑ دیا گیا ہے۔
  • 0 - ہندسہ ہمیشہ ظاہر ہوتا ہے، چاہے نمبر کے ہندسے کم ہوں (اس صورت میں، 0 ظاہر ہوتا ہے)؛
  • . - اعشاریہ الگ کرنے والا نشان؛
  • , — الگ کرنے والا گروپ بندی کا نشان (مثال کے طور پر، ہزاروں الگ کرنے والا)؛
  • ; - فارمیٹس کو الگ کرتا ہے؛
  • - - منفی نمبر کے سابقہ ​​کو نشان زد کرتا ہے۔
  • % - 100 سے ضرب کرتا ہے اور تعداد کو فیصد کے طور پر دکھاتا ہے۔
  • ? - 1000 سے ضرب کرتا ہے اور پی پی ایم میں نمبر دکھاتا ہے۔
  • E - سائنسی اشارے کے لیے mantissa اور exponent کو الگ کرتا ہے۔
آئیے چند مثالوں پر ایک نظر ڈالتے ہیں:
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#");
جب ہم فلوٹنگ پوائنٹ نمبر کو فارمیٹ کرنے کے بارے میں بات کرتے ہیں، تو ہمیں گول کرنے میں کافی دلچسپی ہوتی ہے، ہے نا؟ لہذا، مخصوص پیٹرن سے آگے اعشاریہ جگہوں کے ساتھ کسی نمبر کو تراشتے وقت، اگر آخری تراشی ہوئی تعداد 5 سے زیادہ ہے تو DecimalFormat نمبر کو اوپر لے جاتا ہے۔ اگر آخری ترا ہوا نمبر 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 کو چار اعشاریہ کی درستگی کے ساتھ فارمیٹ کرتے ہیں، تو String کلاس کا format() طریقہ 9.0000 کی قدر کو آؤٹ پٹ کرے گا ، جبکہ DecimalFormat کا اسی طرح کا format() طریقہ 9 کو آؤٹ پٹ کرے گا ۔

BigDecimal اور BigInteger

چونکہ ہم نے جاوا میں راؤنڈنگ نمبرز کے موضوع کو چھو لیا ہے، آئیے بات کرتے ہیں کہ اس طرح کے آپریشنز کے لیے BigDecimal کلاس کو کیسے استعمال کیا جائے ۔ یہ کلاس واقعی بڑی تعداد کے ساتھ کام کرنے پر مرکوز ہے: اس کے لیے، زیادہ سے زیادہ ڈبل اور فلوٹ قدریں بہت چھوٹی ہیں۔ اس کلاس میں فلوٹنگ پوائنٹ راؤنڈنگ کے لیے بہت سی مختلف سیٹنگز ہیں، نیز ریاضی کی کارروائیوں کے لیے بہت سے طریقے ہیں۔ اس میں ایک جیسی کلاس ہے، لیکن بڑے عدد کے ساتھ کام کرنے پر توجہ مرکوز ہے - BigInteger ۔ آپ اس مضمون میں BigDecimal اور BigInteger کے بارے میں مزید پڑھ سکتے ہیں ۔

فارمیٹنگ تاریخ اور وقت

یہ صرف اوپر بتایا گیا تھا کہ اسٹرنگ کلاس کے format() کا استعمال کرتے ہوئے آپ وقت اور تاریخ کو بھی فارمیٹ کرسکتے ہیں۔ ٹھیک ہے، آئیے ایک نظر ڈالیں کہ یہ کیسے ہوا ہے۔ سب سے پہلے، ہم آپ کو یاد دلانا چاہیں گے کہ %t فارمیٹ کی وضاحت کرنے والا تاریخوں کے لیے استعمال ہوتا ہے ۔ دوسرا، کسی ٹیمپلیٹ کو فارمیٹ کرتے وقت، تاریخوں کے لیے ہر فارمیٹ کی وضاحت کرنے والے کے لیے اضافی فارمیٹنگ جھنڈوں کی ضرورت ہوتی ہے۔ تاریخوں کے لیے ممکنہ فارمیٹنگ جھنڈے یہ ہیں:جاوا - 4 میں نمبروں کے آؤٹ پٹ کو فارمیٹ کریں۔
جھنڈے تفصیل
%tB مہینے کا پورا نام، مثال کے طور پر، جنوری، فروری، وغیرہ۔
%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 تک
%tT 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
ایک ہی ڈیٹ آبجیکٹ کو کئی بار دلیل کے طور پر پاس کرنا... یہ بہت اچھا نہیں لگتا، کیا ایسا ہے؟ آئیے اس دلیل کی وضاحت کے لیے $ internal subset کا استعمال کریں جسے ہم استعمال کرنا چاہتے ہیں:
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