1. Bunder angka nyata
Nalika kita wis rembugan, nalika nomer nyata diutus kanggo int
variabel, iku tansah dibunderaké mudhun kanggo integer cilik paling cedhak - bagean pecahan mung dibuwak.
Nanging gampang kanggo mbayangno kahanan nalika nomer pecahan kudu dibunderaké menyang integer paling cedhak ing salah siji arah utawa malah dibunderaké munggah. Apa sing sampeyan tindakake ing kasus iki?
Kanggo iki lan akeh kahanan sing padha, Jawa nduweni Math
kelas, sing nduweni round()
, ceil()
, lan floor()
metode.
Math.round()
cara
Cara iki Math.round()
mbunderake nomer menyang integer paling cedhak:
long x = Math.round(real_number)
Nanging ana nuansa liyane ing kene: cara iki ngasilake long
integer (dudu int
). Amarga nomer nyata bisa dadi gedhe banget, pangripta Jawa mutusake nggunakake jinis integer paling gedhe sing kasedhiya ing Jawa: long
.
Dadi, yen programmer pengin nemtokake asil menyang int
variabel, mula dheweke kudu kanthi tegas nuduhake menyang kompiler yen dheweke nampa kemungkinan mundhut data (yen nomer asil ora cocog karo jinis int
).
int x = (int) Math.round(real_number)
Tuladha:
Pratelan | asil |
---|---|
|
|
|
|
|
|
Math.ceil()
cara
Cara iki Math.ceil()
mbunderake nomer nganti integer. Ing ngisor iki contone:
Pratelan | asil |
---|---|
|
|
|
|
|
|
Math.floor()
cara
Cara iki Math.floor()
ngubengi nomer nganti integer. Ing ngisor iki contone:
Pratelan | asil |
---|---|
|
|
|
|
|
|
Mesthi, nalika dibunderaké nomer mudhun kanggo integer, iku luwih gampang kanggo mung nggunakake jinis operator cast:(int)
Pratelan | asil |
---|---|
|
|
Yen sampeyan angel ngelingi jeneng kasebut, pelajaran basa Inggris sing cendhak bakal mbantu:
Math
tegese matematikaRound
tegese bunderCeiling
tegese langit-langitFloor
tegese lantai
2. Carane angka floating-titik wis kabentuk
Jinis kasebut double
bisa nyimpen nilai ing kisaran saka nganti . Iki sawetara ageng saka nilai (dibandhingake karo jinis) diterangake dening kasunyatan sing jinis (uga ) wis struktur internal temen beda saka jinis integer. Sacara internal, jinis kasebut nyandi nilai kasebut dadi rong angka: sing pisanan diarani mantissa , lan sing nomer loro diarani eksponen .-1.7*10308
+1.7*10308
int
double
float
double
Ayo kita duwe nomer 123456789
lan nyimpen variabel double
. Nalika kita nindakake, nomer diowahi kanggo , lan njero jinis nyimpen rong nomer - lan . Significand ("bagean penting saka nomer" utawa mantissa) disorot abang, dene eksponen disorot biru.1.23456789*108
double
23456789
8
Pendekatan iki ngidini sampeyan nyimpen nomer sing gedhe banget lan sing cilik banget. Nanging amarga perwakilan nomer diwatesi nganti 8 bita (64 bit) lan sawetara bit digunakake kanggo nyimpen eksponen ( uga tandha mantissa lan tandha eksponen), angka maksimal sing kasedhiya kanggo makili mantissa . punika 15 .
Iki minangka gambaran sing disederhanakake babagan carane nomer nyata disusun.
3. Mundhut presisi nalika nggarap nomer nyata
Nalika nggarap angka nyata, tansah elinga yen angka nyata ora persis . Bisa uga ana kesalahan pembulatan lan kesalahan konversi nalika ngowahi saka desimal menyang binar. Kajaba iku, sumber kesalahan sing paling umum yaiku mundhut presisi nalika nambah / nyuda nomer ing skala sing beda banget.
Kasunyatan pungkasan iki rada nggumunake kanggo programer pemula.
Yen kita nyuda saka , kita entuk .1/109
109
109
Ngurangi angka ing skala sing beda banget | Panjelasan |
---|---|
|
Nomer kaloro cilik banget , sing bakal nyebabake significand (disorot warna abu-abu) ora digatekake. 15 digit penting disorot ing oranye. |
Apa sing bisa kita ucapake, pemrograman ora padha karo matematika.
4. Pitfall nalika mbandhingaké nomer nyata
Liyane bebaya dumunung ing Enteni kanggo programer nalika padha mbandhingaké nomer nyata. Iku muncul nalika nggarap nomer nyata, amarga kesalahan babak bisa nglumpukake. Asil iku ana kahanan nalika nomer nyata samesthine padha, nanging ora. Utawa kosok balene: angka-angka sing dikarepake beda, nanging padha.
Tuladha:
Pratelan | Panjelasan |
---|---|
|
Nilai saka variabel a bakal 1000000000.0 Nilai saka variabel c bakal 1000000000.0 (nomer ing b variabel cilik banget) |
Ing conto ing ndhuwur, a
lan c
kudu ora padha, nanging padha.
Utawa ayo njupuk conto liyane:
Pratelan | Panjelasan |
---|---|
|
Nilai saka variabel a bakal 1.0 Nilai saka variabel b bakal1.0 |
5. Kasunyatan menarik babaganstrictfp
Jawa nduweni strictfp
tembung kunci khusus ( strict f loating p oint ), sing ora ditemokake ing basa pamrograman liyane. Lan sampeyan ngerti kenapa sampeyan butuh? Iku worsens akurasi operasi karo nomer floating-titik. Mangkene critane kedadeyan kasebut: