Tipe primitif | Ukuran ing memori | Range saka nilai |
---|---|---|
bait | 8 bit | -128 kanggo 127 |
cendhak | 16 bit | kanggo -32768 kanggo 32767 |
char | 16 bit | saka 0 kanggo 65536 |
int | 32 bit | saka -2147483648 kanggo 2147483647 |
dawa | 64 bit | saka -9223372036854775808 nganti 9223372036854775807 |
ngambang | 32 bit | saka (2 kanggo daya -149) kanggo ((2-2 kanggo daya -23)*2 kanggo daya 127) |
pindho | 64 bit | saka (-2 kanggo daya 63) kanggo ((2 kanggo daya saka 63) - 1) |
boolean | 8 (yen digunakake ing array), 32 (yen digunakake ing non-array) | bener utawa salah |
BigInteger
Unlimited BigDecimal
. Kelas-kelas iki digunakake kanggo apa? Kaping pisanan, kanggo petungan kanthi syarat akurasi sing dhuwur banget. Ana, contone, program kang urip manungsa bisa gumantung ing akurasi petungan (software kanggo pesawat lan roket utawa kanggo peralatan medical). Mulane, yen malah panggonan desimal kaping 150 nduweni peran penting, BigDecimal
iku pilihan sing paling apik. Kajaba iku, cukup asring obyek kasebut digunakake ing jagad keuangan, ing ngendi akurasi pitungan nganti nilai sing paling cilik uga penting banget. Kepiye cara nggarap obyek BigInteger
lan BigDecimal
apa sing penting kanggo elinga? Objek saka kelas kasebut digawe kaya iki:
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);
}
}
Nglewati senar minangka parameter mung salah siji saka konstruktor bisa. Kene kita nggunakake strings amarga nomer kita ngluwihi nilai maksimum long
lan double
, lan piye wae kita kudu nerangake kanggo compiler persis nomer apa kita pengin njaluk :) Cukup pass nomer 111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111. ora bakal bisa: Jawa bakal nyoba "pas" nomer liwati menyang salah siji jinis data primitif, nanging ora bakal pas karo salah siji saka wong-wong 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 akeh yaiku obyek sing ora bisa diganti ( Immutable
) . Sampeyan wis kenal karo prinsip immutability liwat conto kelas String
lan kelas pambungkus kanggo primitif (Integer, Long lan liya-liyane).
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:
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
Jumlah kita ora owah, kaya sing dikarepake. Supaya operasi tambahan bisa sukses, sampeyan kudu nggawe obyek anyar lan nemtokake asil tambahan kasebut.
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:
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111144444444
Saiki kabeh bisa digunakake :) Miturut cara, apa sampeyan sok dong mirsani carane mboten umum operasi tambahan katon?
BigInteger result = integer.add(BigInteger.valueOf(33333333));
Iki minangka titik penting liyane. Kelas nomer gedhe ora nggunakake operator +-*/ ing operasi, nanging menehi sawetara cara. Ayo goleki sing utama (sampeyan bisa, kaya biasane, golek dhaptar lengkap metode ing dokumentasi Oracle: kene lan kene ).
-
cara kanggo nindakake operasi aritmetika:
add()
,subtract()
,multiply()
,divide()
. Digunakake kanggo operasi tambahan, subtraction, multiplikasi lan divisi. -
doubleValue()
,intValue()
,floatValue()
,longValue()
lsp. - Digunakake kanggo ngowahi jumlah gedhe menyang jinis primitif Jawa. Ati-ati nalika nggunakake lan elinga bedane kapasitas!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()
lanmax()
- ngidini sampeyan nemokake nilai minimal lan maksimum rong nomer gedhe liwati.
Wigati dimangerteni: metode 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
Kontrol pembulatan BigDecimal
Topik iki kalebu ing bagean kapisah, wiwit dibunderaké nomer akeh lan nyetel iku dudu bab prasaja. Sampeyan bisa nyetel nomer panggonan desimal kanggo nomerBigDecimal
nggunakake setScale()
. Contone, kita pengin nyetel presisi nomer 111.5555555555 nganti telung desimal. Nanging, kita ora bakal bisa ngliwati nomer 3 minangka argumen kanggo metode kasebut setScale()
lan kanthi mangkono ngatasi masalah kita. Kaya sing kasebut ing ndhuwur, BigDecimal
iki minangka nomer kanggo pitungan kanthi akurasi tambah. Ing wangun saiki, nomer kita duwe 10 panggonan desimal. Kita pengin mbuwang 7 lan ninggalake mung 3. Mulane, saliyane nomer 3, kita kudu ngliwati mode pembulatan minangka parameter . Ana 8 mode pembulatan total BigDecimal
. Cukup akeh! Nanging yen sampeyan kudu bener-bener nyetel akurasi petungan ing program kasebut, sampeyan bakal duwe kabeh sing dibutuhake kanggo iki. Dadi, iki 8 mode pembulatan sing kasedhiya ing BigDecimal
:
-
ROUND_CEILING
- nglumpukake111.5555555555 -> setScale(3, ROUND_CEILING) -> 111.556
-
ROUND_DOWN
- discharge discarding111.5555555555 -> setScale(3, ROUND_DOWN) -> 111.555
-
ROUND_FLOOR
- bunder mudhun111.5555555555 -> setScale(3, ROUND_FLOOR) -> 111.555
-
ROUND_HALF_UP
— dibunderaké munggah yen nomer sawise titik desimal >= .50.55 -> setScale(1, ROUND_HALF_UP) -> 0.6 0.54 -> setScale(1, ROUND_HALF_UP) -> 0.5
-
ROUND_HALF_DOWN
- dibunderaké munggah yen nomer sawise titik desimal > .50.55 -> setScale(1, ROUND_HALF_DOWN) -> 0.5 0.56 -> setScale(1, ROUND_HALF_DOWN) -> 0.6
-
ROUND_HALF_EVEN
- dibunderaké bakal gumantung ing nomer ing sisih kiwa titik desimal. Yen nomer ing sisih kiwa malah, banjur dibunderaké bakal rampung mudhun. Yen nomer ing sisih kiwa titik desimal ganjil, iku bakal dibunderaké munggah.2.5 -> setScale(0, ROUND_HALF_EVEN) -> 2
Nomer ing sisih kiwa titik desimal - 2 - malah. Rounding dumadi mudhun. Amarga kita mbutuhake 0 panggonan desimal, asile bakal dadi 2.
3.5 -> setScale(0, ROUND_HALF_EVEN) -> 4
Nomer ing sisih kiwa titik desimal - 3 - ganjil. Rounding dumadi munggah. Amarga kita mbutuhake 0 panggonan desimal, asile bakal dadi 4.
-
ROUND_UNNECCESSARY
- digunakake ing kasus ngendi mode babak kudu liwati kanggo sawetara cara, nanging nomer ora perlu dibunderaké. Yen sampeyan nyoba ngubengi nomer nalika mode ROUND_UNNECCESSARY disetel, ArithmeticException dibuwang.3.51 -> setScale(1, ROUND_UNNECCESSARY) -> ArithmeticException
-
ROUND_UP
- nglumpukake.111.5551 -> setScale(3, ROUND_UP) -> 111.556
Perbandingan jumlah gedhe
Pitakonan iki uga penting. Sampeyan wis ngelingi yen cara iki digunakake kanggo mbandhingake obyek ing basa Jawaequals()
. Iki diwenehake dening basa dhewe (ing kasus kelas sing dibangun ing Jawa) utawa diganti dening programmer. Nanging ing cilik saka obyek kelas, iku ora dianjurake BigDecimal
kanggo nggunakake cara equals()
kanggo comparison. Alesan kanggo iki yaiku BigDecimal.equals()
metode nomer loro bali mung yen nomer loro kasebut duwe nilai lan skala sing padha : Ayo mbandhingake prilaku metode equals()
y Double
lan y 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
Kaya sing sampeyan ngerteni, angka 1,5 lan 1,50 ing kasus c BigDecimal
dadi ora padha! Iki kedadeyan amarga spesifik metode equals()
ing kelas BigDecimal
. Kanggo mbandhingake sing luwih bener saka loro, 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
Cara kasebut compareTo()
ngasilake 0, tegese padha karo 1,5 lan 1,50. Iki minangka asil sing kita ngarepake! :) Iki rampung pelajaran kita kanggo dina iki. Wektu kanggo bali menyang tugas! :)
GO TO FULL VERSION