Tipe primitif | Ukuran ing memori | Range nilai |
---|---|---|
bait | 8 bit | -128 kanggo 127 |
cendhak | 16 bit | -32768 kanggo 32767 |
char | 16 bit | 0 kanggo 65536 |
int | 32 bit | -2147483648 kanggo 2147483647 |
dawa | 64 bit | -9223372036854775808 kanggo 9223372036854775807 |
ngambang | 32 bit | (2 kanggo daya saka -149) kanggo ((2 kanggo daya saka -23) * 2 kanggo daya saka 127) |
pindho | 64 bit | (-2 kanggo daya saka 63) kanggo ((2 kanggo daya saka 63) - 1) |
boolean | 8 (nalika digunakake ing larik), 32 (yen ora digunakake ing larik) | bener utawa salah |
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);
}
}
Maringake senar menyang konstruktor mung minangka salah sawijining pilihan. Ing kene kita nggunakake strings, amarga nomer kita ngluwihi nilai maksimum kanggo long lan pindho , lan kita mbutuhake sawetara cara kanggo nerangake kanggo compiler nomer sing arep kita nggawe :) Cukup maringaken nomer 11111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 kanggo konstruktor ora bisa: Jawa bakal nyoba kanggo cram nomer liwati menyang salah siji saka jinis data primitif, nanging ora pas karo samubarang mau. Mulane nggunakake senar kanggo pass nomer sing dikarepake iku pilihan apik. Loro-lorone kelas bisa kanthi otomatis ngekstrak nilai numerik saka senar sing dilewati. Titik penting liyane sing kudu dielingi nalika nggarap kelas nomer gedhe yaiku obyek sing ora bisa diganti ( Immutable ). Sampeyan wis kenal karo immutability amarga pengalaman sampeyan karo kelas String lan kelas bungkus kanggo jinis primitif (Integer, Long, lsp.).
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);
}
}
Output konsol:
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
Kaya sing dikarepake, nomer kita ora owah. Kanggo nindakake operasi tambahan, sampeyan kudu nggawe obyek anyar kanggo nampa asil operasi.
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);
}
}
Output konsol:
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111144444444
Delengen, saiki kabeh bisa digunakake :) Ngomong-ngomong, sampeyan ngerti kepiye operasi tambahan sing ora biasa?
BigInteger result = integer.add(BigInteger.valueOf(33333333));
Iki minangka titik penting liyane. Kelas nomer gedhe ora nggunakake operator + - * /. Nanging, padha nyedhiyani pesawat saka cara. Ayo dadi kenalan karo sing utama (kaya biasane, sampeyan bisa nemokake dhaptar lengkap metode ing dokumentasi Oracle: kene lan kene ).
-
cara kanggo operasi aritmetika: nambah () , nyuda () , multiply () , dibagi () . Cara kasebut digunakake kanggo nindakake tambahan, pengurangan, perkalian lan pembagian.
-
doubleValue () , intValue () , floatValue () , longValue () , etc.. digunakake kanggo ngowahi nomer amba kanggo salah siji jinis primitif Jawa. Ati-ati nalika nggunakake cara kasebut. Aja lali babagan beda ukuran bit!
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); } }
Output konsol:
8198552921648689607
-
min () lan max () ngijini sampeyan nemokake nilai minimal lan maksimum rong nomer amba.
Elinga yen cara iki ora statis!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)); } }
Output konsol:
222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
Prilaku bunder BigDecimal
Topik iki duwe bagean kapisah dhewe, wiwit dibunderaké nomer amba lan configuring prilaku dibunderaké ora supaya prasaja. Sampeyan bisa nggunakake cara setScale () kanggo nyetel nomer panggonan desimal kanggo BigDecimal a . Contone, umpamane kita pengin nomer 111.5555555555 duwe telung digit sawise titik desimal. Nanging, kita ora bisa entuk apa sing dikarepake kanthi menehi nomer 3 minangka argumen kanggo metode setScale () . Kaya kasebut ing ndhuwur, BigDecimalyaiku kanggo makili nomer kanthi syarat ketat babagan presisi komputasi. Ing wangun saiki, nomer kita duwe 10 digit sawise titik desimal. Kita pengin nyelehake 7 mau lan tetep mung 3. Mulane, saliyane nomer 3, kita kudu ngliwati mode pembulatan. BigDecimal duwe total 8 mode pembulatan. Sing akeh! Nanging yen sampeyan pancene kudu nyetel presisi petungan, sampeyan bakal duwe kabeh sing dibutuhake. Dadi, iki 8 mode pembulatan sing ditawakake BigDecimal :-
ROUND_CEILING - dibunderaké
111.5555555555 -> setScale(3, ROUND_CEILING) -> 111.556
-
ROUND_DOWN - babak menyang nol
111.5555555555 -> setScale(3, ROUND_DOWN) -> 111.555
-
ROUND_FLOOR - bunder mudhun
111.5555555555 -> setScale(3, ROUND_FLOOR) -> 111.555
-
ROUND_HALF_UP - dibunderaké yen angka sawise titik desimal >= 0,5
0.55 -> setScale(1, ROUND_HALF_UP) -> 0.6 0.54 -> setScale(1, ROUND_HALF_UP) -> 0.5
-
ROUND_HALF_DOWN - dibunderaké yen nomer sawise titik desimal> 0,5
0.55 -> setScale(1, ROUND_HALF_DOWN) -> 0.5 0.56 -> setScale(1, ROUND_HALF_DOWN) -> 0.6
-
ROUND_HALF_EVEN — dibunderaké gumantung saka nomer ing sisih kiwa titik desimal. Yen nomer ing sisih kiwa malah, dibunderaké bakal mudhun. Yen nomer ing sisih kiwa titik desimal ganjil, banjur dibunderaké bakal munggah.
2.5 -> setScale(0, ROUND_HALF_EVEN) -> 2
Nomer ing sisih kiwa desimal yaiku 2 (genap). Nomer kasebut dibunderaké mudhun. Kita pengin 0 panggonan desimal, dadi asile 2.
3.5 -> setScale(0, ROUND_HALF_EVEN) -> 4
Nomer ing sisih kiwa titik desimal yaiku 3 (ganjil). Nomer kasebut dibunderaké. Kita pengin 0 panggonan desimal, dadi asile 4.
-
ROUND_UNNECCESSARY - Mode iki digunakake nalika sampeyan kudu ngliwati mode pembulatan menyang cara, nanging nomer kasebut ora perlu dibunderake. Yen sampeyan nyoba kanggo muter nomer karo ROUND_UNNECCESSARY mode pesawat, ArithmeticException dibuwang.
3.51 -> setScale(1, ROUND_UNNECCESSARY) -> ArithmeticException
-
ROUND_UP - babak adoh saka nol.
111.5551 -> setScale(3, ROUND_UP) -> 111.556
Mbandhingake nomer gedhe
Iki uga penting. Sampeyan bakal kelingan sing nggunakake padha () cara punika mbandhingaké obyek ing Jawa. Implementasine diwenehake dening basa dhewe (kanggo kelas Jawa standar) utawa ditindhes dening programmer. Nanging ing cilik saka obyek BigDecimal , nggunakake witjaksono () cara kanggo mbandhingaké ora dianjurake. Iki amarga cara BigDecimal.equals () ngasilake bener mung yen 2 nomer duwe nilai lan ukuran padha: Ayo mbandhingaké prilaku saka witjaksono () cara kanggo kelas Double lan 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));
}
}
Output konsol:
true
false
Nalika sampeyan bisa ndeleng, kanggo BigDecimal , nomer 1,5 lan 1,50 dadi ora padha! Iki sabenere amarga saka spesifik saka implementasine padha () cara ing kelas BigDecimal . Kanggo perbandingan sing luwih akurat saka rong obyek BigDecimal , luwih becik nggunakake metode 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));
}
}
Output konsol:
0
Metode compareTo () ngasilake 0, tegese 1,5 lan 1,50 padha. Lan iki minangka asil sing dikarepake! :) Sing rampung wulangan kita dina iki. Saiki wayahe bali menyang tugas! :)
GO TO FULL VERSION