Hogyan használjuk a Java BigDecimal-t lebegőpontos számok megjelenítésére?
A Java BigDecimal osztály lehetővé teszi a komplex lebegőpontos számok pontos feldolgozását. Miután létrehoztuk őket, különböző módszereket alkalmazhatunk rájuk. A szintaxis felépítése mindig ugyanaz, így könnyű gyorsan megismerkedni az osztállyal.
Mi az a Java BigDecimal?
A Java BigDecimal lehetővé teszi komplex lebegőpontos számok pontos megjelenítését és feldolgozását , elméletileg bármilyen méretben. Ez a cikk bemutatja a osztály használatának különböző módszereit, legyen szó kerekítésről, aritmetikáról vagy formátumkonverzióról. Megtanulhatja továbbá, hogyan lehet implementálni hash-elésre és pontos, kifinomult összehasonlításokra.
A Java BigDecimal egy 32 bites egész szám skálából és egy opcionális pontosságú, nem skálázott egész számértékből áll. Ebben az esetben a „skála” a tizedesvessző utáni számjegyek számát jelenti, feltéve, hogy azok nagyobbak vagy egyenlőek nullával. Ha azonban az érték kisebb nullánál, akkor azt megszorozzák 10^(-skála) értékkel. Az osztály méretét csak a számítógép memóriája korlátozza. Ez azonban inkább elméleti megfontolás, mivel nem valószínű, hogy egy program olyan számot hozna létre, amely meghaladja a rendelkezésre álló memóriát. A Java BigDecimal kizárólag lebegőpontos számokhoz készült, míg a BigInteger osztály egész számok feldolgozására szolgál.
Mire van szükség az osztályra?
A Java BigDecimal pontossága nem minden esetben szükséges. Vannak azonban olyan helyzetek, amikor pontossága felbecsülhetetlen. Például jól szolgálja a célját az e-kereskedelmi tranzakciókban, ahol a számításokat még a legkisebb tizedesjegy is befolyásolhatja. Az osztályt precíz statikus elemzések elvégzésére is használják. A repülőgépek vagy rakéták vezérlésére és navigációjára használt programok, valamint az orvosi szegmens is támaszkodik az osztályra. Más területeken a Java BigDecimal által biztosított pontosságszint a lehető legjobb biztonságot nyújtja.
Hogyan jön létre egy objektum?
Ahhoz, hogy a BigDecimal-t Java-ban használhassa, először importálnia kell az osztályt a Java programjába. Miután ezt megtette, deklarálhat egy objektumot ebből az osztályból. Ezután hozza létre a kívánt értéket argumentumként, és adja át a megfelelő Java konstruktornak. Miután befejezte ezt a folyamatot, használhatja a BigDecimals-t Java-ban. Az osztályon belül különböző módszereket talál, amelyeket a következő szakaszban részletesebben ismertetünk. Először importáljuk az osztályt, és deklarálunk két BigDecimal objektumot:
/ / Your Java program for the BigDecimal class
import java.math.BigDecimal;
public class BigDecimalExample
{
public static void main(String[] args)
{
/ / Create two new BigDecimals
BigDecimal ExampleOne =
new BigDecimal ("1275936001.744297361");
BigDecimal ExampleTwo =
new BigDecimal ("4746691047.132719503");
}
}javaMostantól ezeket az objektumokat a BigDecimal osztály módszereivel használhatja.
Példák Java BigDecimal-ra
Miután létrehozta az objektumokat, különböző módszerekkel használhatja azokat és végezhet műveleteket. Nézzünk meg néhány példát, hogy megmutassuk, hogyan működik ez. A kimenet a Java System.out.println() parancs segítségével indítható el.
Két BigDecimal hozzáadása
Ha két BigDecimal értéket szeretne összeadni Java-ban, akkor a add() metódust kell használnia. Ehhez tárolja el a két értéket, amelyek összegét ki szeretné számítani. Példánkban a ExampleOne értéket adjuk hozzá a ExampleTwo értékhez.
ExampleOne =
ExampleOne.add(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaSzámok kivonása
Két érték egymástól való kivonásához a subtract() módszerre van szükség. A következő példában ExampleTwo vonunk ki ExampleOne.
ExampleOne =
ExampleOne.subtract(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaÉrtékek szorzása
A Java nyelvben két BigDecimal típusú szám szorzásához használt módszer hasonlóan működik. A neve multiply(). ExampleTwo és ExampleOne szorzásához használja a következő kódot:
ExampleOne =
ExampleOne.multiply(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaSzámok osztása
Ha két BigDecimal objektumot szeretne osztani Java-ban, használja a divide() metódust. Ez ugyanazt a szintaxist követi, mint a többi példa, és így néz ki:
ExampleOne =
ExampleOne.divide(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaEz azonban csak akkor működik, ha az eredmény pontos vagy egész szám. Ha ez nem így van, a következő hibaüzenet jelenik meg: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.. Ez egy futási hibát jelöl. Ennek elkerülése érdekében a divide() metódushoz különböző kerekítési opciók állnak rendelkezésre, amelyek a java.math.RoundingMode segítségével adhatók át. A következő konstansok közül választhat:
| Állandó | Funkció |
|---|---|
| FELSŐ HATÁR | Pozitív végtelenre kerekít |
| DOWN | 0-ra kerekít |
| FLOOR | Negatív végtelenre kerekít |
| FÉL_LE | A legközelebbi szomszédos számra kerekít, és 0 ellentétére, ha mindkettő egyenlő távolságra van |
| FÉL_PÁROS | A következő szomszédos számra kerekít, és a következő páros számra, ha mindkettő egyenlő távolságra van |
| HALF_UP | A legközelebbi szomszédos számra kerekít, és 0 irányába, feltéve, hogy mindkettő azonos távolságra van |
| UNNECESSARY | Elhagyja a kerekítést, és csak pontos műveleteket hajt végre; csak akkor használható, ha az osztás pontos |
| UP | 0-tól távolodva kerekít |
A legfontosabb módszerek áttekintése
Most, hogy megtanultad, hogyan kell használni a BigDecimal-t Java-ban, íme egy áttekintés a legfontosabb módszerekről, amelyeket ezzel használhatsz.
| Módszer | Funkció |
|---|---|
| abs() | Visszaad egy BigDecimal értéket annak abszolút értékével. |
| add() | Visszaad egy BigDecimal értéket, amelynek értéke (ez + hozzáadandó) összetételű. |
| divide() | Kimeneti érték eredménye (ez / osztó) |
| max(BigDecimal val) | A BigDecimal legnagyobb értékét adja vissza. |
| min(BigDecimal val) | A BigDecimal legkisebb értékének kimenete |
| movePointLeft(int n) | Kiadja a BigDecimal értéket, amelyben a tizedesvesszőt „n” értékkel balra tolta el |
| movePointRight(int n) | Kiadja a BigDecimal értéket, amelyben a tizedesvessző az „n” értékkel jobbra került |
| multiply(BigDecimal multiplicand, MathContext mc) | Visszaad egy értéket, amely (ez * szorzó) eredménye. |