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.