1. Haqiqiy sonlarni yaxlitlash
Biz allaqachon muhokama qilganimizdek, int turidagi o'zgaruvchiga haqiqiy sonni tayinlaganda, u har doim pastga butun son sifatida yaxlitlanadi - uning kasr qismi shunchaki tashlanadi.
Biroq, oddiygina yaqin butun songa yoki umuman yuqoriga yaxlitlash kerak bo'lgan holatni osongina tasavvur qilish mumkin. Bu holatda nima qilish kerak?
Java'da va ko'plab o'xshash holatlar uchun Math sinf mavjud, unda round(), ceil(), floor() metodlari mavjud.
Math.round() metodi
Math.round() metodi sonni yaqin butun songa yaxlitlaydi:
long x = Math.round(haqiqiy_son)
Lekin, aytganlaridek, bir nuance bor: ushbu metodning natijasi - long butun son turidir (emas int). Haqiqiy sonlar juda katta bo'lishi mumkin, shuning uchun Java ishlab chiquvchilari Java'dagi eng katta butun son turini - longni ishlatishga qaror qilishdi.
Shuning uchun natijani int turidagi o'zgaruvchiga tayinlash uchun dasturchi aniq kompilyatorga ma'lumotlarning yo'qolishi mumkinligini bildirishi kerak (agar son int turiga sig'masa).
int x = (int) Math.round(haqiqiy_son)
Misollar:
| Komanda | Natija |
|---|---|
|
|
|
|
|
|
Math.ceil() metodi
Math.ceil() metodi sonni butun songa yuqoriga yaxlitlaydi, misollar:
| Komanda | Natija |
|---|---|
|
|
|
|
|
|
Math.floor() metodi
Math.floor() metodi sonni butun songa pastga yaxlitlaydi, misollar:
| Komanda | Natija |
|---|---|
|
|
|
|
|
|
Garchi, sonni butun songa pastga yaxlitlash uchun, oddiygina turini o'zgartirish operatoridan foydalanish (int) osonroq bo'ladi:
| Komanda | Natija |
|---|---|
|
|
Agar bu komandalarni eslab qolish qiyin bo'lsa, sizga kichik bir ingliz tili darsi yordam beradi:
Math— matematikaRound— doira/yaxlitlashCeiling— shiftFloor— pol
2. Haqiqiy sonlarning tuzilishi
double turi -1.7*10308 dan +1.7*10308 gacha bo'lgan qiymatlarni saqlashi mumkin. Bunday ulkan qiymatlar doirasi (int turiga nisbatan) shuni tushuntiradiki, double turi (xuddi float kabi) butun turlarga nisbatan butunlay boshqacha tuzilgan. Har bir double turidagi o'zgaruvchi ikki sonni o'z ichiga oladi: birinchisi mantissa, ikkinchisi esa — daraja.
Yuqorida keltirilgan misolda a va c teng bo'lmasligi kerak, lekin ular teng.
Yoki boshqa bir misolni olaylik:
| Komanda | Izoh |
|---|---|
|
a o'zgaruvchisida 1.0 qiymati bo'ladib o'zgaruvchisida 1.0 qiymati bo'ladi |
5. strictfp haqida qiziqarli fakt
Java'da boshqa dasturlash tillarida mavjud bo'lmagan maxsus strictfp (strict floating point) kalit so'z mavjud. Va bilasizmi, u nima uchun kerak? U haqiqiy sonlar bilan ishlashning aniqligini yomonlashtiradi. Uning paydo bo'lish tarixi taxminan quyidagicha:
GO TO FULL VERSION