JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ گول نمبر

جاوا ۾ گول نمبر

گروپ ۾ شايع ٿيل
فلوٽنگ پوائنٽ نمبر (فلوٽ، ڊبل) استعمال ڪيا ويندا آهن جڏهن ايڪسپريس کي ڳڻڻ جي ضرورت هوندي آهي ته decimal precision. اڪائونٽنگ ۽ ٻين ڪمپيوٽنگ عملن ۾ اعليٰ درستگي جي ضرورت هوندي آهي. جاوا ۾ گول نمبر - 1پر ڇا اسان کي ھميشه ضرورت آھي ڊگھي ”دم“ جي عددن کان پوءِ؟ ٿي سگهي ٿو ٽن حقيقي حصن جي درستگي اسان لاء ڪافي آهي؟ ۽ اسان هن اختيار سان مطمئن آهيون، ڪيئن صحيح طريقي سان گول ڪرڻ لاء؟ اھو اھو آھي جيڪو اسان اڄ بابت ڳالهائينداسين: اسان جاوا ۾ انگن کي گول ڪرڻ جا طريقا ڏسندا .

اسٽرنگ فارميٽ

پهرين طريقي جي طور تي، اسان ڏسنداسين گول گول ڊبل:
double value = 34.766674;
String result = String.format("%.3f",value);
System.out.print(result);//  34,767
نتيجي طور، اسان پنھنجي فلوٽنگ پوائنٽ نمبر 34766674 کي 3 ڊيسيمل جڳهن جي درستگي سان فارميٽ ڪنداسين ، ڇو ته فارميٽنگ جي هدايتن ۾ اسان ٽي ڊيسيمل جڳھون بيان ڪيون آھن "%.3f. بدلي ۾، %f جڏھن ھڪڙي اسٽرنگ کي فارميٽ ڪري ٿو ته فلوٽنگ پوائنٽ جي قسم کي اشارو ڪري ٿو. انگ، جنهن ۾ جاوا ۾ ڊيٽا ٽائيپ ڊبل ۽ فلوٽ شامل آهي. مٿي ڏنل مثال ۾، اسان نتيجن جي قيمت کي ڪنسول ڏانهن ڪڍون ٿا. هاڻي سوال اهو آهي ته: اسان ان کي ڪيئن مختصر ڪري سگهون ٿا؟ اهو آسان آهي: توهان کي استعمال ڪرڻ جي ضرورت آهي printf، جنهن جي نتيجي ۾. is format + print. نتيجي طور، اڳوڻو اسان جو مثال گھٽجي ويندو:
double value = 34.766674;
System.out.printf("%.3f",value);
ھن طريقي کان علاوه، PrintStream ڪلاس جي آئوٽ مثال ۾ پڻ ھڪڙي فارميٽ جو طريقو آھي، جيڪو ساڳيو ڪم ڪري ٿو:
double value = 34.766674;
System.out.format("%.3f",value);
گولنگ HALF_UP موڊ ۾ ٿئي ٿي - ان نمبر ڏانھن جيڪو ڪٽجي وڃڻ واري (0 يا 10 تائين) جي ويجھو آھي. جيڪڏهن اهي انگ هڪجهڙائي وارا آهن (5 جي صورت ۾)، پوء گولنگ اپ ڪيو ويندو آهي. مثال:
String firstResult = String.format("%.3f",7.0004);// 7,000
String secondResult = String.format("%.3f",7.0005);// 7,001
String thirdResult = String.format("%.3f",7.0006);// 7,001
اسان هيٺ وڌيڪ تفصيل سان گولن جي طريقن تي بحث ڪنداسين. جاوا ۾ گول نمبر - 2

Decimal Format

ٻيو اختيار استعمال ڪرڻ آهي DecimalFormat ڪلاس . اهو جاوا ۾ ڪنهن به نمبر کي فارميٽ ڪرڻ لاءِ ٺاهيو ويو آهي، اهو هڪ انٽيجر هجي يا سچل پوائنٽ نمبر. جڏهن اسان DecimalFormat کي انسٽنٽ ڪريون ٿا، اسان ان کي فارميٽ اسٽرنگ پاس ڪري سگھون ٿا. اهو ظاهر ڪندو ته ان پٽ لاءِ فارميٽ ڪرڻ لاءِ ڪيتريون ڊيسيمل جايون. اھو اھو آھي جيڪو اسان جو مثال DecimalFormat استعمال ڪندي نظر ايندو :
double value = 34.766674;
DecimalFormat decimalFormat = new DecimalFormat( "#.###" );
String result = decimalFormat.format(value);
System.out.print(result);//34,767
#.### لائن ھڪڙو نمونو آھي جيڪو ظاھر ڪري ٿو ته اسان منظور ٿيل قدر کي 3 ڊيسيمل جڳھن تي فارميٽ ڪري رھيا آھيون. DecimalFormat اعتراض ٺاھڻ کان پوءِ نموني کي تبديل ڪرڻ لاءِ، توھان استعمال ڪري سگھوٿا ان جو ApplyPattern ۽ applyLocalizedPattern طريقا :
DecimalFormat decimalFormat = new DecimalFormat("#.###");
decimalFormat.applyPattern("#.#");
decimalFormat.applyLocalizedPattern("#.#####");
پر اڄ اسان گول ڪرڻ بابت ڳالهائي رهيا آهيون، ڇا اسان نه آهيون؟ جڏهن ڪنهن عدد کي ڊڪشنري جڳهن سان ڪٽجي ته مخصوص نموني کان ٻاهر، DecimalFormat انگ کي گول ڪري ٿو جيڪڏهن آخري ڪٽيل انگ 5 کان وڏو آهي. پر ڇا ٿيندو جيڪڏهن انگ 5 آهي؟ اهو ظاهر ٿئي ٿو ته اهو بلڪل ويجھي انگن اکرن جي وچ ۾ آهي. پوءِ ڇا؟ انهي حالت ۾، پوئين نمبر حساب ۾ ورتو وڃي. جيڪڏهن اهو برابر آهي، گول ڪيو ويندو آهي:
DecimalFormat decimalFormat = new DecimalFormat("#.###");
String result = decimalFormat.format(7.4565);
System.out.println((result));// 7,457
جيڪڏهن بيڪار، اهو انجام نه ڏنو ويو آهي:
DecimalFormat decimalFormat = new DecimalFormat("#.###");
String result = decimalFormat.format(7.4575);
System.out.println((result));// 7,457
String.format() ۽ DecimalFormat.format(). پھريون ھڪڙو ھميشه پوئين زيرو پرنٽ ڪندو جيتوڻيڪ ڪو جزوي حصو نه آھي. مثال:
String firstResult = String.format("%.3f", 7.000132);
System.out.println((firstResult)); // 7.000

DecimalFormat decimalFormat = new DecimalFormat("#.###");
String secondResult = decimalFormat.format(7.000132);
System.out.println((secondResult));  // 7
جيئن ته اسان ڏسي سگهون ٿا، جڏهن نمبر 7.000132 کي ٽن ڊيسيمل جڳهن تي فارميٽ ڪيو وڃي ته، String جي فارميٽ() جو طريقو 7.000 کي آئوٽ ڪندو، جڏهن ته DecimalFormat جو فارميٽ() طريقو 7 کي آئوٽ ڪندو. يعني توهان String.format() يا DecimalFormat. format( ) ان تي منحصر آهي ته ڇا توهان کي پوئتي صفر جي ضرورت آهي يا نه. مٿي بيان ڪيل طريقن کي استعمال ڪندي، اسان نتيجو حاصل ڪيو هڪ تار جي صورت ۾. اچو ته ڏسو طريقن کي واپس حاصل ڪرڻ جا صحيح عددي قدر.

رياضي

اهو ناممڪن آهي ته هڪ خاص ڪلاس جو ذڪر نه ڪيو وڃي مختلف رياضي جي عملن لاءِ انگن سان گڏ - رياضي . جاوا ۾ گول نمبر - 3هن ڪلاس ۾ گول ڪرڻ جا طريقا به آهن، پر انهن جي برعڪس جيڪي اڳ ۾ بيان ڪيا ويا آهن، اهي توهان کي اجازت نه ڏيندا آهن ته مخصوص عددن جي جڳهن کي مقرر ڪن، بلڪه هڪ عدد کي گول ڪن:
  • Math.ceil() ويجھي انٽيجر تائين گول ٿئي ٿو، پر انٽيجر جو قسم نه، پر ٻيڻو موٽائي ٿو:

    double value = 34.777774;
    double result = Math.ceil(value);
    System.out.println((result)); //35.0

    جيتوڻيڪ اسان وٽ 34.0000000 آهي، Math.ceil استعمال ڪرڻ کان پوءِ به اسان 35.0 حاصل ڪنداسين.

    Math.floor() گول ھيٺ ويجھي انٽيجر ڏانھن، پڻ نتيجو موٽائي ٿو ٻيڻو:

    double value = 34.777774;
    double result = Math.floor(value);
    System.out.println((result)); //34.0

    ٻيهر، جيڪڏهن اسان وٽ 34.999999999 جي قيمت آهي، ته پوء Math.floor استعمال ڪرڻ کان پوء اسان 34.0 حاصل ڪنداسين.

  • Math.round () - ويجھي عدد کي گول، نتيجو int ڏئي ٿو:

    double value = 34.777774;
    int result = Math.round(value);
    System.out.println((result)); //35

    جيڪڏهن اسان جو نمبر 34.5 آهي، اهو 35 تائين گول ڪيو ويندو، پر جيڪڏهن اهو 34.499 کان ٿورو گهٽ آهي، اهو نمبر 34 تائين گهٽجي ويندو.

    ان لاءِ نه ته رڳو پوري حقيقي حصي کي ڪٽيو وڃي، پر ان عمل کي مقرر ڪرڻ لاءِ ڊيسيمل جڳهن جي هڪ خاص نمبر تي ۽ ساڳئي وقت گول، انگ کي 10^n (10 جي طاقت سان n) سان ضرب ڪيو وڃي ٿو، جتي n. ضروري decimal جڳهن جي تعداد جي برابر آهي. ان کان پوء، رياضي ڪلاس جو ڪجهه طريقو استعمال ڪيو ويندو آهي گول ڪرڻ لاء، ۽ پوء ٻيهر 10^n سان ورهايو ويندو آهي:

    double value = 34.777774;
    double scale = Math.pow(10, 3);
    double result = Math.ceil(value * scale) / scale;
    System.out.println((result)); //34.778

    Math.pow - ٻه دليل وٺندو آهي. پهريون نمبر آهي، ٻيو طاقت آهي جنهن کي اٿارڻ جي ضرورت آهي.

BigDecimal سان گول ڪرڻ

BigDecimal ھڪڙو ڪلاس آھي جيڪو توھان کي ڪم ڪرڻ جي اجازت ڏئي ٿو سچل پوائنٽ نمبرن سان. خاص طور تي، ان جي مکيه خصوصيت اها آهي ته اهو پنهنجي ترتيب واري ڊيگهه جي جزوي انگن کي ذخيرو ڪري سگهي ٿو (يعني، انگ جي حد تي ڪا حد ناهي). ان کان علاوه، هي طبقو رياضي جي پروسيسنگ لاء مختلف طريقن کي ذخيرو ڪري ٿو، بشمول گولنگ. ھن اعتراض جو ڪلاس ٺاھي سگھجي ٿو ٺاھيندڙ کي ڊبل ڪرڻ لاءِ، اسٽرنگ کي فلوٽنگ پوائنٽ نمبر ڏيکارڻ لاءِ، ڊبل ۽ MathContext وغيره. MathContext RoundingMode جو هڪ مجموعو آهي ۽ هڪ انگ جيڪو بيان ڪري ٿو انگن جو ڪل تعداد ڳولھيل قدر ۾. گول ڪرڻ جا قاعدا RoundingMode: DOWN - rounding to صفر. UP - صفر موڊ مان گول ڪرڻ. CEILING - مثبت لامحدود طرف گول ڪرڻ. فرش - منفي لامحدود ڏانهن گول. HALF_UP - گول "ويجھي پاڙيسري" ڏانھن جيڪڏھن ٻئي پاڙيسري برابر نه ھجن (يعني، جڏھن انگ گول ڪيو پيو وڃي 5). هن معاملي ۾، rounding اپ ڪيو ويندو آهي. HALF_DOWN - ”ويجھي پاڙيسري“ ڏانھن گول ڪندي. جيڪڏهن ٻئي پاڙيسري برابر نه آهن، ان صورت ۾ گول هيٺ. HALF_EVEN - "ويجھي پاڙيسري" ڏانھن گول جيڪڏھن ٻئي پاڙيسري برابر ناھن. انهي صورت ۾، گول به پاڙيسري ڏانهن (جيئن مٿي بيان ڪيل DecimalFormat ۾). غير ضروري - تصديق ڪرڻ لاءِ استعمال ڪيو ويو ته گهربل آپريشن جو صحيح نتيجو آهي. تنهن ڪري، گول ڪرڻ جي ضرورت ناهي. مثال:
MathContext context = new MathContext(5, RoundingMode.HALF_UP);
double value = 34.777554;
BigDecimal result = new BigDecimal(value, context);
System.out.println(result); //34.778
تعمير ڪندڙ ۾ گولنگ قاعدو مقرر ڪرڻ جي صلاحيت کان علاوه، BigDecimal توهان کي مثال جي ٺهڻ کان پوء گولنگ موڊ سيٽ ڪرڻ جي اجازت ڏئي ٿي. هن کي ڪرڻ لاء، استعمال ڪريو setScale طريقو ، جنهن ۾ توهان کي مقرر ڪرڻ جي ضرورت آهي decimal جڳهن جو تعداد ۽ گول جي ضابطن:
double value = 34.777554;
BigDecimal result = new BigDecimal(value);
result = result.setScale(3, RoundingMode.DOWN);
System.out.println(result); //34.777
BigDecimal وٽ اندروني int variables به آھن جن کي گول ڪرڻ واري موڊ کي سيٽ ڪرڻ لاءِ ٺاھيو ويو آھي ( ROUND_DOWN , ROUND_CEILING , ROUND_FLOOR ...) اھي گول ڪرڻ وارا ضابطا آھن جھڙا آھن جيڪي RoundingMode ڪلاس ۾ پيش ڪيا ويا آھن ۽ ساڳي طرح setScale ۾ استعمال ٿيندا آھن :
BigDecimal result = new BigDecimal(value);
result = result.setScale(3, BigDecimal.ROUND_DOWN);
هن مضمون ۾ BigDecimal ڪلاس بابت وڌيڪ پڙهو .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION