Kako razdvojiti dvostruko na cjelobrojne i decimalne dijelove
1. Pregled
U ovom uputstvu istražit ćemo razne metode za razdvajanje cjelobrojnih i decimalnih dijelova vrsta s pomičnom zarezom u Javi plutati i dvostruko.
2. Problemi s vrstama plutajućih točaka
Krenimo od gledanja jednostavnog razlomka i naivnog načina izvođenja razdvajanja putem lijevanja:
dvostruki doubleNumber = 24,04; int intPart = (int) doubleNumber; System.out.println ("Dvostruki broj:" + dvostruki broj); System.out.println ("Cjelobrojni dio:" + intPart); System.out.println ("Decimalni dio:" + (doubleNumber - intPart));
Kada pokušamo pokrenuti gornji kod, evo što dobivamo:
Dvostruki broj: 24,04 Cjelobrojni dio: 24 Decimalni dio: 0,03999999999999915
Suprotno našem očekivanju, izlaz ne ispisuje decimalni dio pravilno. Stoga brojevi s pomičnom zarezom nisu prikladni za izračune u kojima se pogreške zaokruživanja ne mogu tolerirati.
3. Prvi pristup: razdvajanje Niz
Prije svega, pretvorimo decimalni broj u a Niz ekvivalent. Tada možemo podijeliti Niz u indeksu decimalne točke.
Shvatimo to na primjeru:
dvostruki doubleNumber = 24,04; String doubleAsString = String.valueOf (doubleNumber); int indexOfDecimal = doubleAsString.indexOf ("."); System.out.println ("Dvostruki broj:" + dvostruki broj); System.out.println ("Cjelobrojni dio:" + doubleAsString.substring (0, indexOfDecimal)); System.out.println ("Decimalni dio:" + doubleAsString.substring (indexOfDecimal));
Rezultat gornjeg koda je:
Dvostruki broj: 24.04 Cijeli dio: 24 decimalni dio: .04
Rezultat je upravo ono što očekujemo. Ali, problem je ovdje u ograničenju upotrebe niza - što znači da sada nećemo moći izvoditi bilo koje druge aritmetičke operacije.
4. Drugi pristup: Korištenje BigDecimal
The BigDecimal klasa u Javi pruža korisniku potpunu kontrolu nad ponašanjem zaokruživanja. Ova klasa također pruža operacije za aritmetiku, manipulaciju razmjerom, zaokruživanje, usporedbu, raspršivanje i pretvorbu formata.
Iskoristimo BigDecimal da biste dobili cjelobrojne i decimalne dijelove broja s pomičnim zarezom:
double doubleNumber = 24,04; BigDecimal bigDecimal = novi BigDecimal (String.valueOf (doubleNumber)); int intValue = bigDecimal.intValue (); System.out.println ("Dvostruki broj:" + bigDecimal.toPlainString ()); System.out.println ("Cjelobrojni dio:" + intValue); System.out.println ("Decimalni dio:" + bigDecimal.subtract (novi BigDecimal (intValue)). ToPlainString ());
Izlaz će biti:
Dvostruki broj: 24.04 Cjelobrojni dio: 24 Decimalni dio: 0.04
Kao što gore možemo vidjeti, izlaz je očekivan. Aritmetičke operacije možemo izvoditi i pomoću metoda navedenih u BigDecimal razred.
5. Zaključak
U ovom smo članku razgovarali o različitim metodama za razdvajanje cjelobrojnih i decimalnih dijelova vrsta s pomičnom zarezom. Također smo razgovarali o prednostima korištenja BigDecimal za izračune s pomičnom zarezom.
Također, naš detaljni vodič o BigDecimalu i BigIntegeru na Javi raspravlja o više karakteristika i scenarijima korištenja dviju klasa.
Konačno, potpuni izvorni kod za ovaj vodič je dostupan na GitHubu.