Hoe Java BigDecimal te gebruiken om drijvende-kommagetallen weer te geven
De Java-klasse BigDecimal maakt het mogelijk om complexe drijvende-kommagetallen nauwkeurig te verwerken. Nadat ze zijn aangemaakt, kun je er verschillende methoden op toepassen. De structuur van de syntaxis is altijd hetzelfde, dus je raakt snel vertrouwd met de klasse.
Wat is Java BigDecimal?
Met Java BigDecimal kunt u complexe drijvende-kommagetallen van in theorie elke grootte nauwkeurig weergeven en verwerken. In dit artikel worden verschillende methoden voor het gebruik van deze klasse beschreven, of het nu gaat om afronding, rekenkundige bewerkingen of formaatconversie. U leert ook hoe u deze klasse kunt implementeren voor hashing en voor nauwkeurige, geavanceerde vergelijkingen.
Java BigDecimal bestaat uit een 32-bits geheel getalschaal en een niet-geschaalde geheel getalwaarde met optionele precisie. In dit geval betekent ‘schaal’ het aantal cijfers achter de komma, op voorwaarde dat deze groter zijn dan of gelijk zijn aan nul. Als de waarde echter kleiner is dan nul, wordt deze vermenigvuldigd met 10^(-schaal). De grootte van de klasse wordt alleen beperkt door het geheugen van de computer. Dit is echter meer een theoretische overweging, aangezien het onwaarschijnlijk is dat een programma een getal zal creëren dat het beschikbare geheugen overschrijdt. BigDecimal in Java is uitsluitend bedoeld voor drijvende-kommagetallen, terwijl de klasse BigInteger wordt gebruikt voor het verwerken van gehele getallen.
Waarvoor is de les nodig?
Het precisieniveau van Java BigDecimal is niet voor elk scenario nodig. Maar er zijn situaties waarin de precisie van onschatbare waarde is. Het is bijvoorbeeld zeer geschikt voor e-commercetransacties, waar zelfs de kleinste decimale plaats van invloed kan zijn op berekeningen. De klasse wordt ook gebruikt voor het uitvoeren van nauwkeurige statische analyses. Programma’s die worden gebruikt voor de besturing en navigatie van vliegtuigen of raketten zijn afhankelijk van de klasse, net als de medische sector. Op andere gebieden biedt de nauwkeurigheid van Java BigDecimal de best mogelijke veiligheid.
Hoe wordt een object gemaakt?
Om BigDecimal in Java te gebruiken, moet u eerst de klasse in uw Java-programma importeren. Zodra u dat hebt gedaan, kunt u een object van deze klasse declareren. Maak vervolgens de gewenste waarde als argument aan en geef deze door aan de juiste Java-constructor. Zodra u dit proces hebt voltooid, kunt u BigDecimals in Java gebruiken. Binnen de klasse vindt u verschillende methoden, die we in het volgende gedeelte nader zullen toelichten. Eerst gaan we de klasse importeren en twee BigDecimal-objecten declareren:
/ / 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");
}
}javaNu kunt u deze objecten gebruiken met de methoden voor de klasse BigDecimal.
Voorbeelden voor Java BigDecimal
Zodra u de objecten hebt gemaakt, kunt u verschillende methoden gebruiken om de objecten te gebruiken en bewerkingen uit te voeren. Laten we een paar voorbeelden bekijken om te laten zien hoe dit werkt. De uitvoer wordt gestart met behulp van het Java-commando System.out.println().
Twee BigDecimals toevoegen
Als u twee BigDecimals in Java wilt optellen, moet u de methode add() gebruiken. Sla hiervoor de twee waarden op waarvan u de som wilt berekenen. In ons voorbeeld wordt de waarde ExampleOne opgeteld bij de waarde ExampleTwo.
ExampleOne =
ExampleOne.add(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaGetallen aftrekken
Om twee waarden van elkaar af te trekken, heb je de subtract() nodig. In het volgende voorbeeld trekken we ExampleTwo af van ExampleOne.
ExampleOne =
ExampleOne.subtract(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaWaarden vermenigvuldigen
De methode die je gebruikt om twee BigDecimals in Java te vermenigvuldigen, werkt op dezelfde manier. Deze heet multiply(). Om ExampleTwo met ExampleOne te vermenigvuldigen, gebruik je de volgende code:
ExampleOne =
ExampleOne.multiply(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaGetallen delen
Als u twee BigDecimal-objecten in Java wilt delen, gebruikt u de methode divide(). Deze volgt dezelfde syntaxis als de andere voorbeelden en ziet er als volgt uit:
ExampleOne =
ExampleOne.divide(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaDit werkt echter alleen als het resultaat exact of een geheel getal is. Als dit niet het geval is, wordt de volgende foutmelding weergegeven: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.. Dit beschrijft een runtime-fout. Om dit te voorkomen, zijn er verschillende afrondingsopties voor de methode divide(), die kunnen worden doorgegeven via java.math.RoundingMode. U kunt kiezen uit de volgende constanten:
| Constant | Functie |
|---|---|
| CEILING | Rondt af naar positief oneindig |
| DOWN | Rondt af naar 0 |
| FLOOR | Rondt af naar negatief oneindig |
| HALF_DOWN | Rondt af naar het dichtstbijzijnde naburige getal en het tegenovergestelde van 0 als beide even ver verwijderd zijn |
| HALF_EVEN | Rondt af naar het dichtstbijzijnde naburige getal en naar het dichtstbijzijnde even getal als beide even ver verwijderd zijn |
| HALF_UP | Rondt af naar het dichtstbijzijnde naburige getal en in de richting van 0, op voorwaarde dat beide even ver verwijderd zijn |
| UNNECESSARY | Slaat afronding over en voert alleen exacte bewerkingen uit; kan alleen worden gebruikt als de deling exact is |
| UP | Rondt af van 0 |
Overzicht van de belangrijkste methoden
Nu je hebt geleerd hoe je BigDecimal in Java kunt gebruiken, volgt hier een overzicht van enkele van de belangrijkste methoden die je ermee kunt gebruiken.
| Methode | Functie |
|---|---|
| abs() | Geeft een BigDecimal met de absolute waarde terug |
| add() | Geeft een BigDecimal terug waarvan de waarde bestaat uit (dit + optelling) |
| divide() | Geeft de waarde van (dit / deler) weer |
| max(BigDecimal val) | Geeft het maximum van de BigDecimal weer |
| min(BigDecimal val) | Geeft het minimum van de BigDecimal weer |
| movePointLeft(int n) | Geeft een BigDecimal weer waarbij de decimale punt naar links is verschoven met de waarde ‘n’ |
| movePointRight(int n) | Geeft een BigDecimal weer waarbij de decimale punt naar rechts is verplaatst met de waarde ‘n’ |
| multiply(BigDecimal multiplicand, MathContext mc) | Geeft een waarde terug die het resultaat is van (dit * multiplicand). |