Hvordan bruke Java BigDecimal til å vise flytende tall
Java-klassen BigDecimal gjør det mulig å behandle komplekse flytende tall med presisjon. Når de er opprettet, kan du bruke forskjellige metoder på dem. Syntaksstrukturen er alltid den samme, så det er enkelt å raskt bli kjent med klassen.
Hva er Java BigDecimal?
Java BigDecimal lar deg vise og behandle komplekse flytende tall av teoretisk sett hvilken som helst størrelse. Denne artikkelen viser deg ulike metoder for å bruke denne klassen, enten det er for avrunding, aritmetikk eller formatkonvertering. Du lærer også hvordan du implementerer den for hashing og for presise, sofistikerte sammenligninger.
Java BigDecimal består av en 32-biters heltallskala og en uskalert heltallverdi med valgfri presisjon. I dette tilfellet betyr «skala» antall sifre etter desimaltegnet, forutsatt at de er større enn eller lik null. Hvis verdien er mindre enn null, multipliseres den imidlertid med 10^(-skala). Størrelsen på klassen er kun begrenset av datamaskinens minne. Dette er imidlertid mer en teoretisk betraktning, da det er usannsynlig at et program vil opprette et tall som overskrider det tilgjengelige minnet. BigDecimal i Java er utelukkende ment for flytende tall, mens BigInteger-klassen brukes til å behandle heltall.
Hva er klassen nødvendig for?
Java BigDecimals presisjonsnivå er ikke nødvendig i alle situasjoner. Men det finnes situasjoner hvor presisjonen er uvurderlig. For eksempel fungerer den godt i e-handelstransaksjoner, hvor selv den minste desimal kan påvirke beregningene. Klassen brukes også til å utføre presise statiske analyser. Programmer som brukes til kontroll og navigering av fly eller raketter er avhengige av klassen, og det samme gjelder medisinsk sektor. I andre felt gir presisjonsnivået til Java BigDecimal best mulig sikkerhet.
Hvordan blir et objekt opprettet?
For å bruke BigDecimal i Java må du først importere klassen til Java-programmet ditt. Når du har gjort det, kan du deklarere et objekt av denne klassen. Deretter oppretter du ønsket verdi som et argument og sender dette til den aktuelle Java-konstruktoren. Når du har fullført denne prosessen, kan du bruke BigDecimals i Java. Innenfor klassen finner du ulike metoder, som vi vil forklare nærmere i neste avsnitt. Først skal vi importere klassen og deklarere to BigDecimal-objekter:
/ / 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");
}
}javaNå kan du bruke disse objektene med metodene for BigDecimal-klassen.
Eksempler for Java BigDecimal
Når du har opprettet objektene, kan du bruke forskjellige metoder for å bruke objektene og utføre operasjoner. La oss se på noen eksempler for å vise hvordan dette fungerer. Utdataene startes ved hjelp av Java-kommandoen System.out.println().
Legge til to BigDecimals
Hvis du vil legge sammen to BigDecimals i Java, må du bruke metoden add(). For å gjøre dette må du lagre de to verdiene du vil beregne summen for. I vårt eksempel vil verdien ExampleOne legges til verdien ExampleTwo.
ExampleOne =
ExampleOne.add(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaTrekk fra tall
For å trekke to verdier fra hverandre, trenger du metoden subtract(). I neste eksempel trekker vi ExampleTwo fra ExampleOne.
ExampleOne =
ExampleOne.subtract(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaMultipliser verdier
Metoden du bruker for å multiplisere to BigDecimals i Java fungerer på samme måte. Den kalles multiply(). For å multiplisere ExampleTwo med ExampleOne, bruk følgende kode:
ExampleOne =
ExampleOne.multiply(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaDele tall
Hvis du vil dele to BigDecimal-objekter i Java, bruker du metoden divide(). Denne følger samme syntaks som de andre eksemplene og ser slik ut:
ExampleOne =
ExampleOne.divide(ExampleTwo);
System.out.println ("Here is the result: " + ExampleOne);javaDette fungerer imidlertid bare hvis resultatet er eksakt eller et heltall. Hvis dette ikke er tilfelle, vil følgende feilmelding vises: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.. Dette beskriver en kjøretidsfeil. For å unngå dette finnes det ulike avrundingsalternativer for metoden divide(), som kan overføres via java.math.RoundingMode. Du kan velge mellom følgende konstanter:
| Konstant | Funksjon |
|---|---|
| TAK | Avrunder til positiv uendelig |
| DOWN | Avrunder til 0 |
| FLOOR | Avrunder til negativ uendelig |
| HALF_DOWN | Avrunder til nærmeste nabotall og motsatt av 0 hvis begge er like langt unna |
| HALV_JEVN | Avrunder til nærmeste nabotall og til nærmeste partall hvis begge er like langt unna |
| HALF_UP | Avrunder til nærmeste nabotall og i retning av 0, forutsatt at begge er like langt unna |
| UNNECESSARY | Utelater avrunding og utfører kun eksakte operasjoner; kan kun brukes hvis divisjonen er eksakt |
| UP | Avrunder bort fra 0 |
Oversikt over de viktigste metodene
Nå som du har lært hvordan du bruker BigDecimal i Java, følger her en oversikt over noen av de viktigste metodene du kan bruke med det.
| Metode | Funksjon |
|---|---|
| abs() | Returnerer en BigDecimal med dens absolutte verdi |
| add() | Returnerer en BigDecimal hvis verdi består av (dette + Addend) |
| divide() | Utgangsverdien er resultatet av (dette / Divisor) |
| max(BigDecimal val) | Viser maksimumsverdien av BigDecimal |
| min(BigDecimal val) | Viser minimum av BigDecimal |
| movePointLeft(int n) | Viser en BigDecimal hvor desimaltegnet er flyttet til venstre med verdien «n» |
| movePointRight(int n) | Viser en BigDecimal der desimaltegnet er flyttet til høyre med verdien «n» |
| multiply(BigDecimal multiplicand, MathContext mc) | Returnerer en verdi som er resultatet av (this * multiplicand) |
7a13b71b544a0a47b82b89c94cb2cba2
a043a1b67eddde60f587280a4ca1a324
bc7ff3cc8bd2c8e909d817f10f496251
388d113eebff89cedf1ec961d226da55