boolean
we char
aşakdaky görnüşlere bölünýär:
- bitewi sanlar :
byte
,short
we ;int
long
- ýüzýän nokat (hakyky sanlar hem diýilýär):
float
wedouble
.
long
, -9223372036854775808-den 9223372036854775807 aralygynda bolup biler. double
1.7e-308 bilen 1.7e + 308 aralygy bilen ýüzýän nokatlaryň sanlaryndan. Hakyky sanlar barada has giňişleýin maglumaty şu makalada okap bilersiňiz . Emma kabul ederlikli aralykdan has uly sanlary saklamaly bolsa näme etmeli? Bu ýagdaýda bize gerek bolar BigInteger
we BigDecimal
.
Java-da BigInteger
Java synpy,BigInteger
64 bitlik uzynlygy bolmadyk özbaşdak uzynlyk bitewi bahalara analog hökmünde ulanylýar. Mundan başga-da, sanly ýönekeý Number
görnüşler üçin adaty örtükler ýaly Integer
,,, we ş.m. synpyň nesli , şonuň üçin ýönekeý görnüşlere alyp barýan usullary durmuşa geçirýär: Long
Byte
Double
BigInteger value = new BigInteger("32145");
int intValue = value.intValue();//32145
long longValue = value.longValue();//32145
double doubleValue = value.doubleValue();//32145.0
BigInteger
Bahasy konstruktora geçýär, ýöne setir görnüşinde şeýle obýektiň döredilmegini derrew görýäris . Birden köp dizaýneriniň bardygyny bellemelidiris, ýöne ähli ýagdaýlarda. Ilkinji görnüşler maglumatlaryň doly mukdaryny ýerleşdirmeýän bolsa BigInteger
, maglumatlar şol başlangyç görnüşiň çägine çenli kesiler. Theöne şol bir wagtyň özünde, bu usullaryň (we ş.m.) meňzeşleri bar intValueExact()
, longValueExact()
ýeke-täk tapawudy, öwrülişigiň ýönekeý görnüşi maglumat aralygyna laýyk gelmeýän bolsa, “ ArithmeticException” zyňylýar .
BigInteger yzygiderliligi
Içerki ulanmak üçin synpyň yzygiderliligi bar:BigInteger.ZERO
BigInteger.ONE
BigInteger.TEN
BigInteger
Bular degişlilikde bahalar bilen hemişelik obýektler 0
we 1
.10
BigInteger usullary
Bu synpyň esasy aýratynlyklaryndan biri, Java-da adaty arifmetiki amallary amala aşyrýan usullardan doly. Mysal üçin:-
jemlemek amallary:
BigInteger firstValue = new BigInteger("37995"); BigInteger secondValue = new BigInteger("35466"); BigInteger resultValue = firstValue.add(secondValue);//73461
-
köpeltmek amallary:
BigInteger firstValue = new BigInteger("37995"); BigInteger secondValue = new BigInteger("35466"); BigInteger resultValue = firstValue.multiply(secondValue);//1347530670
-
bir san başga birine bölünende galanlaryny tapmak amallary:
BigInteger firstValue = new BigInteger("37995"); BigInteger secondValue = new BigInteger("35466"); BigInteger resultValue = firstValue.remainder(secondValue);//2529
-
sanyň mutlak bahasyny almak (ýagny modulo, gol çekilmedik):
BigInteger firstValue = new BigInteger("-37995"); BigInteger resultValue = firstValue.abs();//37995
-
mod hasaplamak bilen amallar :
BigInteger firstValue = new BigInteger("-34"); BigInteger secondValue = new BigInteger("5"); BigInteger resultValue = firstValue.mod(secondValue); //1
-
tötänleýin san almak we emele gelen bahanyň ulanjak bitleriniň sanyny görkezmek:
BigInteger firstValue = BigInteger.probablePrime(8, new Random());//211 BigInteger secondValue = BigInteger.probablePrime(16, new Random());//42571
-
birneme süýşürmek amallary (bu >> n)
Çep smena:
BigInteger firstValue = new BigInteger("5"); BigInteger firstResultValue = firstValue.shiftLeft(3);//40
Sag tarapa geçiň:
BigInteger secondValue = new BigInteger("34"); BigInteger secondResultValue = secondValue.shiftRight(2); //8
Java-da BigDecimal
Haçan-da hakyky mukdarda özbaşdak uzynlyk gerek bolsa, Java synpy ulanylýar -BigDecimal
. double
Düzgün bolşy ýaly, has özleşdirmek opsiýalaryny berýändigi sebäpli, ýerine maliýe bilen işlemek üçin ulanylýar . Bir synpyň nesli ýaly BigInteger
we obýektiň bahasyny belli bir başlangyç görnüşi hökmünde yzyna gaýtaryp berýän usullary bar: BigDecimal
Number
BigDecimal value = new BigDecimal(35563.3);
long longValue = value.longValue();//35563
double doubleValue = value.doubleValue();//35563.3
Azaldylanda görşümiz ýaly long
diňe bitewi bölek galýar we onluk ýerler taşlanýar.
BigDecimal konstruktorlary
Gurluşykçylara has içgin serederisBigDecimal
, sebäbi synpda has giň saýlaw bar. int
Bir obýektiň bahasyny dürli ýollar bilen (geçip , hatda geçip ) kesgitlemäge mümkinçilik berýän konstruktorlar bar long
we muňa rugsat berýänlerem bar. döredilen obýektiň sazlamalaryny düzüň (tegelek usullar, onluk ýerleriň sany): double
String
BigInteger
BigDecimal firstValue = new BigDecimal("455656.545");//455656.545
Bu ýerde hemme zat düşnükli, göresimiz gelýän onluk ýerleriň bahasyny we sanyny gönüden-göni kesgitleýäris.
BigDecimal secondValue = new BigDecimal(3445.54);//3445.5399999999999636202119290828704833984375
Bu konstruktoryň netijelerini öňünden çaklap bolmaýar, sebäbi tebigaty boýunça gaty düşnüksiz görnüşi bolan goşa kesgitleýäris. Şonuň üçin adatça konstruktorda ulanmak maslahat berilýär String
.
BigDecimal thirdValue = new BigDecimal(3445.554645675444, MathContext.DECIMAL32);//3445.555
Belledik double
, ýöne şol bir wagtyň özünde tegelek düzgüni (onluk ýerleriň sanyny we tegeleklemek algoritmini öz içine alýan) parametr hem düzýäris.
char[] arr = new String("455656.545").toCharArray();
BigDecimal fourthValue = new BigDecimal(arr, 2, 6);//5656.5
Haýsy elementden obýekt üçin bahalary alýandygymyzy we bu elementleriň näçesini alýandygymyzy görkezýäris.
BigDecimal fifthValue = new BigDecimal(new BigInteger("44554"), 3);//44.554
Biz eýýäm bar bolan obýekti alýarys BigInteger
, onluk ýerleriň sanyny kesgitleýäris.
BigDecimal usullary
Bu synpdaBigDecimal
dürli arifmetiki amallar üçin usullar hem bar, ýöne BigInteger
bit ýaly işlemek usullary ýok. Emma, muňa garamazdan, esasy aýratynlyk BigDecimal
ýüzýän nokatlar bilen işlemekde çeýeligi. Hakyky sanlary özleşdirmäge güýç berýän käbir usullara seredeliň:
-
takyklygy alýarys (sanlaryň sany):
BigDecimal value = new BigDecimal("454334.34334"); int result = value.precision();//11
-
onluk ýerleriň sanyny we tegelek düzgüni düzüň:
BigDecimal firstValue = new BigDecimal(3445.544445); BigDecimal secondValue = firstValue.setScale(3,BigDecimal.ROUND_CEILING);//3445.545
Aşakda tegelek düzgünleri kesgitlemek üçin yzygiderlilige has içgin serederis.
-
gerekli mukdarda onluk ýerleri we tegelek düzgüni görkezmek bilen
BigDecimal
başga birine bölüň :BigDecimal
BigDecimal firstValue = new BigDecimal("455656.545"); BigDecimal secondValue = new BigDecimal(3445.544445); BigDecimal result = firstValue.divide(secondValue, 2,RoundingMode.DOWN);//132.24
-
onluk nokady belli bir ýer bilen saga / çepe geçirmek:
BigDecimal value = new BigDecimal("455656.545"); BigDecimal firstResult = value.movePointRight (2);//45565654.5 BigDecimal secondResult = value.movePointLeft (2);//4556.56545
-
yzky nollary kesmek:
BigDecimal value = new BigDecimal("45056.5000"); BigDecimal result = value.stripTrailingZeros();//45056.5
Eger hakyky bölegimizde nollaryň hemmesi bar bolsa we tutuş böleginde nollar bar bolsa (ýa-da asla onluk ýerlerimiz ýok), onda:
BigDecimal value = new BigDecimal("450000.000"); BigDecimal result = value.stripTrailingZeros();//4.5E+5
BigDecimal tegelek düzgünleri
Tegelek düzgünlerini kesgitlemek üçin, içerdeBigDecimal
tegelek algoritmleri suratlandyrýan ýörite yzygiderliligi görüp bileris: ROUND_UP
- noldan tegelek, hakyky bölegine tegelek:
BigDecimal firstValue = new BigDecimal("2.578");
BigDecimal firstResult = firstValue.setScale(1, BigDecimal.ROUND_UP );//2.6
BigDecimal secondValue = new BigDecimal("-2.578");
BigDecimal secondResult = secondValue.setScale(1, BigDecimal.ROUND_UP );//-2.5
ROUND_DOWN
- nola tegelek, ýagny hakyky böleginiň kesilmegi:
BigDecimal firstValue = new BigDecimal("2.578");
BigDecimal firstResult = firstValue.setScale(1, BigDecimal.ROUND_DOWN );//2.5
BigDecimal secondValue = new BigDecimal("-2.578");
BigDecimal secondResult = secondValue.setScale(1, BigDecimal.ROUND_DOWN );//-2.6
ROUND_CEILING
- polo positiveitel çäksizlige tegelek. .Agny, sanymyz polo isitel bolsa, - - ROUND_UP
, negatiw bolsa, - -ROUND_DOWN
BigDecimal firstValue = new BigDecimal("2.578");
BigDecimal firstResult = firstValue.setScale(1, BigDecimal.ROUND_CEILING);//2.6
BigDecimal secondValue = new BigDecimal("-2.578");
BigDecimal secondResult = secondValue.setScale(1, BigDecimal.ROUND_CEILING);//-2.5
ROUND_FLOOR
- otrisatel çäksizlige tegelek, ýagny sanymyz polo isitel bolsa, - - ROUND_DOWN
, negatiw bolsa, onda ->ROUND_UP
BigDecimal firstValue = new BigDecimal("2.578");
BigDecimal firstResult = firstValue.setScale(1, BigDecimal.ROUND_FLOOR);//2.5
BigDecimal secondValue = new BigDecimal("-2.578");
BigDecimal secondResult = secondValue.setScale(1, BigDecimal.ROUND_FLOOR);//-2.6
Göz öňünde tutulýan baha üçin, kesilen onluk ýer bilen bu iň ýakyn belgini seredilýän sanyň iň ýakyn goňşusy hasaplarys. Mysal üçin, 2.43 2,5-den 2,4, 2.48 bolsa 2,5-e ýakyn bolar. ROUND_HALF_DOWN
- “iň ýakyn goňşymyza” tegelek. Iki goňşy hem belli bir bahadan deň bolsa, tegelek nola çenli ýerine ýetirilýär. Deňdir, meselem, tegelek san 5 bolanda, 0 we 10 aralygynda şol bir aralyk):
BigDecimal firstValue = new BigDecimal("2.58");
BigDecimal firstResult = firstValue.setScale(1, BigDecimal.ROUND_HALF_DOWN );//2.6
BigDecimal secondValue = new BigDecimal("2.55");
BigDecimal secondResult = secondValue.setScale(1, BigDecimal.ROUND_HALF_DOWN );//2.5
ROUND_HALF_UP
- “iň ýakyn goňşymyza” tegelek tertibi. Iki goňşy deň bolsa, tegeleklemek amala aşyrylýar (bu mekdepde bize öwredilen şol tegelek):
BigDecimal firstValue = new BigDecimal("2.53");
BigDecimal firstResult = firstValue.setScale(1, BigDecimal.ROUND_HALF_UP );//2.5
BigDecimal secondValue = new BigDecimal("2.55");
BigDecimal secondResult = secondValue.setScale(1, BigDecimal.ROUND_HALF_UP );//2.6
ROUND_HALF_EVEN
- iki goňşy deň bolmasa, “iň ýakyn goňşy” tegelek. Bu ýagdaýda, tegeleklenen san geň bir san bilen öňde bolsa, tegelek bolýar, hatda deň bolsa, tegelek bolýar:
BigDecimal firstValue = new BigDecimal("2222.2225");
BigDecimal secondValue = firstValue.setScale(3,BigDecimal.ROUND_HALF_EVEN );//2222.222
Bu netijäni alýarys, sebäbi tegelek bolanda, 5 öňki 2-nji belgä seredýär we hatda hatda tegelekdigini görýär. Iföne:
BigDecimal firstValue = new BigDecimal("2222.22255");
BigDecimal secondValue = firstValue.setScale(3,BigDecimal.ROUND_HALF_EVEN );//2222.223
Şol tegelek ýokarlanýar, sebäbi soňky 5 öňki bahasyna seredýär we täsin san görýär. Netijede, san 6-a çenli tegeleklenýär, şondan soň indiki 6-da tegelek bolýar. Sixöne alty adam indi çep tarapdaky sana seredip bilenoklar, sebäbi san has ýokaryk has ýakyn we netijede soňky 2-i 1-e köpeldilýär ROUND_UNNECESSARY
- sanyň tegelenmeginiň zerur däldigini barlamak üçin ulanylýar. .Agny, sanyň zerur onluk ýerleriň sanyny barlaýarys:
BigDecimal firstValue = new BigDecimal("2.55");
BigDecimal firstResult = firstValue.setScale(2, BigDecimal.ROUND_UNNECESSARY);//2.55
Bu ýerde hemme zat gowy, bahanyň iki san bar we onluk nokatdan soň diňe iki sanyň bardygyny barlaýarys. Iföne:
BigDecimal secondValue = new BigDecimal("2.55");
BigDecimal secondResult = secondValue.setScale(1, BigDecimal.ROUND_UNNECESSARY);
Soňra alarys - ArithmeticException
sebäbi synag edilýän baha onluk ýerleriň görkezilen sanyndan ýokarydyr. Twoöne iki onluk ýeri barlasak, aslynda ol ýerde bir bar bolsa, kadadan çykma bolmaz we ýiten sanlar diňe nol bilen doldurylýar:
BigDecimal thirdValue = new BigDecimal("2.5");
BigDecimal thirdResult = thirdValue.setScale(3, BigDecimal.ROUND_UNNECESSARY );//2.500
Şeýle hem , y BigDecimal
yzygiderlilige meňzeş yzygiderliligiň bardygyny belläsim gelýär BigInteger ZERO
we ONE
. Ine, resminamalaraTEN
baglanyşyk . Iň soňunda: obýektler bilen amallary ýerine ýetireniňizde , belki, könelerini üýtgetmeris, ýöne hemişe täzesini alarys. Bu , olaryň bolşy ýaly, ýaradylandan soň üýtgemejekdigini aýdýar . Başgaça aýdylanda, olaryň ähli usullary obýektiň içki ýagdaýyny üýtgedip bilmez; köplenç, ulanýan funksiýamyzda görkezilen parametrler bilen täze obýekti yzyna gaýtaryp biler. BigInteger
BigDecimal
immutable
String
GO TO FULL VERSION