ابتدائي قسم | ياداشت ۾ ماپ | قدر جي حد |
---|---|---|
بائيٽ | 8 بٽ | -128 کان 127 تائين |
مختصر | 16 بٽ | -32768 کان 32767 تائين |
چار | 16 بٽ | 0 کان 65536 تائين |
int | 32 بٽ | -2147483648 کان 2147483647 تائين |
ڊگهو | 64 بٽ | -9223372036854775808 کان 9223372036854775807 |
فلوٽ | 32 بٽ | (2 کان پاور آف -149) کان ((2 کان پاور آف -23) * 2 کان پاور 127 تائين) |
ٻيڻو | 64 بٽ | (-2 کان پاور آف 63) کان ((2 کان پاور آف 63) - 1) |
بولين | 8 (جڏهن arrays ۾ استعمال ڪيو ويو)، 32 (جڏهن صفن ۾ استعمال نه ڪيو ويو) | سچ يا ڪوڙ |
public class Main {
public static void main(String[] args) {
BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
System.out.println(integer);
BigDecimal decimal = new BigDecimal("123.444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444");
System.out.println(decimal);
}
}
تعمير ڪندڙ کي اسٽرنگ پاس ڪرڻ صرف هڪ ممڪن اختيار آهي. Here we use strings, because our numbers exceed the maximum values fo r lo ng and double , and we do need some way to explain to the compiler which number we want to create :) Simply passing the number 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111 to the constructor won't work ڪوشش ڪندو ته پاس ٿيل نمبر کي ڪنهن هڪ پرائمري ڊيٽا جي قسمن ۾ داخل ڪرڻ جي، پر اهو انهن مان ڪنهن ۾ به نه ٺهندو. ان ڪري گهربل نمبر پاس ڪرڻ لاءِ اسٽرنگ استعمال ڪرڻ سٺو آپشن آهي. ٻئي ڪلاس پاڻمرادو انگن اکرن کي ڪڍي سگھن ٿا پاس ٿيل تارن مان. ياد رکڻ لاءِ هڪ ٻيو اهم نقطو جڏهن وڏي تعداد واري طبقن سان ڪم ڪري رهيو آهي اهو آهي ته انهن جون شيون ناقابل بدلائي ( Imutable ) آهن. توھان اڳي ئي واقف آھيو immutability جي مھرباني توھان جي تجربي جي ڪري String class ۽ wrapper classes for Primitive type (Integer, Long, etc.).
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
System.out.println(integer);
integer.add(BigInteger.valueOf(33333333));
System.out.println(integer);
}
}
ڪنسول آئوٽ:
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
جيئن توهان توقع ڪندا، اسان جو نمبر تبديل نه ڪيو آهي. اضافي آپريشن کي انجام ڏيڻ لاء، توهان کي آپريشن جو نتيجو حاصل ڪرڻ لاء هڪ نئون اعتراض ٺاهڻ گهرجي.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
System.out.println(integer);
BigInteger result = integer.add(BigInteger.valueOf(33333333));
System.out.println(result);
}
}
ڪنسول آئوٽ:
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111144444444
ڏسو، ھاڻي سڀ ڪجھ ڪم ڪري ٿو جيئن اھو ھجڻ گھرجي :) رستي ۾، ڇا توھان نوٽيس ڪيو ته اضافي آپريشن ڪيترو غير معمولي نظر اچي ٿو؟
BigInteger result = integer.add(BigInteger.valueOf(33333333));
هي هڪ ٻيو اهم نقطو آهي. وڏا-نمبر ڪلاس استعمال نٿا ڪن + - * / آپريٽرس. ان جي بدران، اهي طريقا مهيا ڪن ٿا. اچو ته واقف ٿيون مکيه سان (هميشه وانگر، توهان ڳولي سگهو ٿا طريقن جي مڪمل فهرست Oracle دستاويزن ۾: هتي
۽ هتي
).
-
رياضي جي عملن لاءِ طريقا: add() , subtract() , multiply() , divide() . اهي طريقا استعمال ڪيا ويندا آهن اضافي، ذيلي، ضرب ۽ تقسيم ڪرڻ لاء، ترتيب سان.
-
doubleValue() , intValue() , floatValue() , longValue() , etc. استعمال ڪيا ويندا آھن ھڪڙي وڏي انگ کي جاوا جي ابتدائي قسمن ۾ تبديل ڪرڻ لاءِ. محتاط رھو جڏھن انھن طريقن کي استعمال ڪندي. بٽ سائيز ۾ اختلافن جي باري ۾ نه وساريو!
import java.math.BigInteger; public class Main { public static void main(String[] args) { BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); long result = integer.longValue(); System.out.println(result); } }
ڪنسول آئوٽ:
8198552921648689607
-
منٽ () ۽ وڌ ۾ وڌ () توهان کي ٻن وڏن انگن جي گھٽ ۾ گھٽ ۽ وڌ ۾ وڌ قدر ڳولڻ جي اجازت ڏيو.
نوٽ ڪريو ته اهي طريقا جامد نه آهن!import java.math.BigInteger; public class Main { public static void main(String[] args) { BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"); BigInteger integer2 = new BigInteger("222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"); System.out.println(integer.max(integer2)); } }
ڪنسول آئوٽ:
222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
BigDecimal rounding رويي
هن موضوع جو پنهنجو الڳ سيڪشن آهي، ڇاڪاڻ ته وڏن انگن کي گول ڪرڻ ۽ گول ڪرڻ واري رويي کي ترتيب ڏيڻ ايترو سادو ناهي. توهان استعمال ڪري سگهو ٿا setScale() طريقو هڪ BigDecimal لاءِ decimal هنڌن جو تعداد مقرر ڪرڻ لاءِ . مثال طور، فرض ڪريو ته اسان چاهيون ٿا ته نمبر 111.5555555555 ڊيسيمل پوائنٽ کان پوءِ ٽي عدد هجن. تنهن هوندي، اسان حاصل نٿا ڪري سگھون جيڪو اسان چاهيون ٿا نمبر 3 کي پاس ڪرڻ سان هڪ دليل طور setScale() طريقي سان. جيئن مٿي بيان ڪيو ويو آهي، BigDecimal انگن جي نمائندگي ڪرڻ لاءِ آهي سخت ضرورتن سان گڏ ڪمپيوٽيشنل درستگي تي. ان جي موجوده شڪل ۾، اسان جو نمبر 10 عددن کان پوءِ ڊيسيمل پوائنٽ آهي. اسان انهن مان 7 کي ڇڏڻ چاهيون ٿا ۽ صرف 3 رکڻ چاهيون ٿا. ان جي مطابق، نمبر 3 کان علاوه، اسان کي گولنگ موڊ پاس ڪرڻ گهرجي. BigDecimal وٽ ڪل 8 گولن جا طريقا آھن. اهو تمام گهڻو آهي! پر جيڪڏهن توهان کي پنهنجي حسابن جي درستگي کي درست ڪرڻ جي ضرورت آهي، ته توهان وٽ هر شيءِ توهان کي گهربل هوندي. تنهن ڪري، هتي آهن 8 گولنگ موڊس جيڪي پيش ڪيا ويا آهن BigDecimal :-
ROUND_CEILING - گول مٿي
111.5555555555 -> setScale(3, ROUND_CEILING) -> 111.556
-
ROUND_DOWN — گول صفر ڏانھن
111.5555555555 -> setScale(3, ROUND_DOWN) -> 111.555
-
ROUND_FLOOR — گول ھيٺ
111.5555555555 -> setScale(3, ROUND_FLOOR) -> 111.555
-
ROUND_HALF_UP — گول مٿي ٿئي ٿو جيڪڏھن عدد کان پوءِ جو نمبر >= 0.5
0.55 -> setScale(1, ROUND_HALF_UP) -> 0.6 0.54 -> setScale(1, ROUND_HALF_UP) -> 0.5
-
ROUND_HALF_DOWN — گول مٿي ٿئي ٿو جيڪڏھن عدد کان پوءِ جو انگ 0.5
0.55 -> setScale(1, ROUND_HALF_DOWN) -> 0.5 0.56 -> setScale(1, ROUND_HALF_DOWN) -> 0.6
-
ROUND_HALF_EVEN — گول ڪرڻ جو دارومدار عددي پوائنٽ جي کاٻي پاسي واري نمبر تي آهي. جيڪڏهن کاٻي طرف نمبر برابر آهي، گولنگ هيٺ ٿي ويندي. جيڪڏهن ڊيسيمل پوائنٽ جي کاٻي پاسي وارو انگ بي جوڙ آهي، ته پوءِ گولنگ مٿي ٿيندي.
2.5 -> setScale(0, ROUND_HALF_EVEN) -> 2
اعشاريه جي جڳهه جي کاٻي پاسي جو نمبر 2 آهي (جيتوڻيڪ). نمبر گول ڪيو ويو آهي. اسان چاهيون ٿا 0 decimal جڳھون، تنھنڪري نتيجو 2 آھي.
3.5 -> setScale(0, ROUND_HALF_EVEN) -> 4
اعشاريه پوائنٽ جي کاٻي پاسي جو انگ 3 (بي جوڙ) آھي. نمبر گول ڪيو ويو آهي. اسان چاهيون ٿا 0 decimal جڳھون، تنھنڪري نتيجو 4 آھي.
-
ROUND_UNNECCESSARY - ھي موڊ استعمال ڪيو ويندو آھي جڏھن توھان کي ھڪڙي طريقي سان گول ڪرڻ واري موڊ کي پاس ڪرڻ گھرجي، پر نمبر کي گول ٿيڻ جي ضرورت نه آھي. جيڪڏهن توهان ROUND_UNNECCESSARY موڊ سيٽ سان هڪ نمبر کي گول ڪرڻ جي ڪوشش ڪندا، هڪ ArithmeticException اڇلايو ويندو.
3.51 -> setScale(1, ROUND_UNNECCESSARY) -> ArithmeticException
-
ROUND_UP — صفر کان پري گول.
111.5551 -> setScale(3, ROUND_UP) -> 111.556
وڏن انگن جو مقابلو ڪرڻ
اهو پڻ اهم آهي. توھان کي ياد ھوندو ته اسان استعمال ڪندا آھيون equals() طريقو جاوا ۾ شيون compare آھي. عملدرآمد يا ته ٻولي طرفان مهيا ڪيل آهي (معياري جاوا ڪلاسز لاءِ) يا پروگرامر طرفان اوور رائڊ ڪيو ويو آهي. پر BigDecimal اعتراضن جي صورت ۾ ، استعمال ڪرڻ جي برابر () طريقي جي مقابلي لاء سفارش نه ڪئي وئي آهي. اهو ئي سبب آهي ته BigDecimal.equals() طريقو صحيح موٽائي ٿو صرف ان صورت ۾ جڏهن 2 انگن جو قدر ۽ پيمانو ساڳيو آهي: اچو ته Double ۽ BigDecimal طبقن لاءِ برابر () طريقي جي رويي جو مقابلو ڪريون:import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
Double a = 1.5;
Double b = 1.50;
System.out.println(a.equals(b));
BigDecimal x = new BigDecimal("1.5");
BigDecimal y = new BigDecimal("1.50");
System.out.println(x.equals(y));
}
}
ڪنسول آئوٽ:
true
false
جئين توهان ڏسي سگهو ٿا، BigDecimal لاءِ ، انگ اکر 1.5 ۽ 1.50 غير برابر ٿي ويا! اهو خاص طور تي بگ ڊيسيمل ڪلاس ۾ برابر () طريقي تي عمل درآمد جي وضاحتن جي ڪري هو . ٻن BigDecimal شين جي وڌيڪ صحيح مقابلي لاءِ ، compareTo() طريقو استعمال ڪرڻ بهتر آهي :
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal x = new BigDecimal("1.5");
BigDecimal y = new BigDecimal("1.50");
System.out.println(x.compareTo(y));
}
}
ڪنسول آئوٽ:
0
compareTo () طريقو 0 واپس آيو، جنهن جو مطلب آهي ته 1.5 ۽ 1.50 برابر آهن. ۽ اهو نتيجو آهي جنهن جي اسان توقع ڪئي هئي! :) جيڪو اڄ اسان جو سبق ختم ڪري ٿو. هاڻي اهو وقت آهي ڪمن ڏانهن واپس وڃڻ جو! :)
GO TO FULL VERSION