Jak používat Java BigDecimal k zobrazení čísel s plovoucí desetinnou čárkou
Třída Java BigDecimal umožňuje přesné zpracování složitých čísel s plovoucí desetinnou čárkou. Po jejich vytvoření na ně můžete aplikovat různé metody. Struktura syntaxe je vždy stejná, takže se s touto třídou snadno a rychle seznámíte.
Co je Java BigDecimal?
Java BigDecimal umožňuje přesně zobrazovat a zpracovávat složité čísla s plovoucí desetinnou čárkou teoreticky jakékoli velikosti. Tento článek vám ukáže různé způsoby použití této třídy, ať už pro zaokrouhlování, aritmetiku nebo převod formátu. Dozvíte se také, jak ji implementovat pro hašování a pro přesné, sofistikované porovnávání.
Java BigDecimal se skládá z 32bitového celočíselného měřítka a neškálované celočíselné hodnoty s volitelnou přesností. V tomto případě „měřítko“ znamená počet číslic za desetinnou čárkou, pokud jsou větší nebo rovny nule. Pokud je však hodnota menší než nula, je vynásobena 10^(-měřítko). Velikost třídy je omezena pouze pamětí počítače. Jedná se však spíše o teoretickou úvahu, protože je nepravděpodobné, že by program vytvořil číslo, které by překročilo dostupnou paměť. BigDecimal v Javě je určen výhradně pro čísla s plovoucí desetinnou čárkou, zatímco třída BigInteger se používá pro zpracování celých čísel.
K čemu je tato třída potřebná?
Úroveň přesnosti Java BigDecimal není nutná pro každý scénář. Existují však situace, kdy je její přesnost neocenitelná. Například dobře slouží při transakcích v elektronickém obchodování, kde i nejmenší desetinné místo může mít vliv na výpočty. Třída se také používá k provádění přesných statických analýz. Programy používané pro řízení a navigaci letadel nebo raket se na tuto třídu spoléhají, stejně jako lékařský segment. V jiných oblastech poskytuje úroveň přesnosti Java BigDecimal nejlepší možnou bezpečnost.
Jak se vytváří objekt?
Chcete-li použít BigDecimal v Javě, musíte nejprve importovat třídu do svého programu Java. Jakmile to uděláte, můžete deklarovat objekt této třídy. Dále vytvořte požadovanou hodnotu jako argument a předávejte ji příslušnému konstruktoru Java. Jakmile tento proces dokončíte, můžete používat BigDecimals v Javě. V rámci třídy najdete různé metody, které podrobněji vysvětlíme v následující části. Nejprve importujeme třídu a deklarujeme dva objekty BigDecimal:
/ / 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");
}
}javaNyní můžete tyto objekty používat s metodami třídy BigDecimal.
Příklady pro Java BigDecimal
Jakmile objekty vytvoříte, můžete je používat různými způsoby a provádět s nimi různé operace. Podívejme se na několik příkladů, které vám ukážou, jak to funguje. Výstup se spouští pomocí příkazu Java System.out.println().
Sčítání dvou čísel typu BigDecimal
Pokud chcete v Javě sčítat dvě hodnoty typu BigDecimal, musíte použít metodu add(). K tomu uložte dvě hodnoty, jejichž součet chcete vypočítat. V našem příkladu bude hodnota ExampleOne přičtena k hodnotě ExampleTwo.
ExampleOne =
ExampleOne.add(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaOdečíst čísla
Chcete-li odečíst dvě hodnoty od sebe, potřebujete metodu subtract(). V následujícím příkladu odečteme ExampleTwo od ExampleOne.
ExampleOne =
ExampleOne.subtract(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaNásobte hodnoty
Metoda, kterou používáte k násobení dvou čísel typu BigDecimal v Javě, funguje podobně. Nazývá se multiply(). Chcete-li vynásobit ExampleTwo číslem ExampleOne, použijte následující kód:
ExampleOne =
ExampleOne.multiply(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaDělení čísel
Pokud chcete v Javě rozdělit dva objekty BigDecimal, použijte metodu divide(). Ta má stejnou syntaxi jako ostatní příklady a vypadá takto:
ExampleOne =
ExampleOne.divide(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaTo však funguje pouze v případě, že výsledek je přesný nebo celočíselný. Pokud tomu tak není, zobrazí se následující chybová zpráva: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.. Jedná se o chybu běhu. Aby se tomu zabránilo, existují různé možnosti zaokrouhlování pro metodu divide(), které lze přenášet prostřednictvím java.math.RoundingMode. Můžete si vybrat z následujících konstant:
| Konstantní | Funkce |
|---|---|
| STROP | Zaokrouhluje na kladnou nekonečnost |
| DOWN | Zaokrouhluje na 0 |
| FLOOR | Zaokrouhluje na zápornou nekonečnost |
| HALF_DOWN | Zaokrouhluje na nejbližší sousední číslo a opačné číslo než 0, pokud jsou obě čísla stejně vzdálená |
| HALF_EVEN | Zaokrouhluje na nejbližší sousední číslo a na nejbližší sudé číslo, pokud jsou obě čísla stejně vzdálená |
| HALF_UP | Zaokrouhluje na nejbližší sousední číslo a ve směru 0, pokud jsou obě čísla ve stejné vzdálenosti. |
| UNNECESSARY | Vynechá zaokrouhlování a provede pouze přesné operace; lze použít pouze v případě, že dělení je přesné |
| UP | Zaokrouhluje od 0 |
Přehled nejdůležitějších metod
Nyní, když jste se naučili, jak používat BigDecimal v Javě, zde je přehled některých z nejdůležitějších metod, které s ním můžete použít.
| Metoda | Funkce |
|---|---|
| abs() | Vrací číslo typu BigDecimal s jeho absolutní hodnotou. |
| add() | Vrací hodnotu BigDecimal, jejíž hodnota se skládá z (this + Addend) |
| divide() | Výstupní hodnota je výsledkem (this / Divisor) |
| max(BigDecimal val) | Vrátí maximum hodnoty BigDecimal |
| min(BigDecimal val) | Vypíše minimum BigDecimal |
| movePointLeft(int n) | Vypíše hodnotu BigDecimal, u které byla desetinná čárka posunuta o hodnotu „n“ doleva |
| movePointRight(int n) | Vypíše BigDecimal, kde desetinná čárka byla posunuta doprava o hodnotu „n“ |
| multiply(BigDecimal multiplicand, MathContext mc) | Vrací hodnotu, která je výsledkem (this * multiplicand). |