Ako rozdeliť dvojité na celé a desatinné časti

1. Prehľad

V tomto tutoriále preskúmame rôzne metódy na oddelenie celých a desatinných častí typov s pohyblivou rádovou čiarkou v Jave, menovite plavák a dvojitý.

2. Problémy s typmi pohyblivých bodov

Začnime tým, že sa pozrieme na jednoduchý zlomok a naivný spôsob vykonania rozchodu pomocou castingu:

double doubleNumber = 24.04; int intPart = (int) doubleNumber; System.out.println ("Double Number:" + doubleNumber); System.out.println ("Integer Part:" + intPart); System.out.println ("Desatinná časť:" + (doubleNumber - intPart));

Keď sa pokúsime spustiť vyššie uvedený kód, dostaneme toto:

Dvojité číslo: 24.04 Celočíselná časť: 24 Desatinná časť: 0,03999999999999915

Napriek našim očakávaniam výstup netlačí desatinnú časť správne. Čísla s pohyblivou rádovou čiarkou preto nie sú vhodné na výpočty, pri ktorých nemožno tolerovať chyby zaokrúhľovania.

3. Prvý prístup: Rozdelenie String

Najskôr preveďme desatinné číslo na a String ekvivalent. Potom môžeme rozdeliť String na index desatinnej čiarky.

Poďme to pochopiť na príklade:

double doubleNumber = 24.04; Reťazec doubleAsString = String.valueOf (doubleNumber); int indexOfDecimal = doubleAsString.indexOf ("."); System.out.println ("Double Number:" + doubleNumber); System.out.println ("Integer Part:" + doubleAsString.substring (0, indexOfDecimal)); System.out.println ("Desatinná časť:" + doubleAsString.substring (indexOfDecimal)); 

Výstup vyššie uvedeného kódu je:

Dvojité číslo: 24.04 Celočíselná časť: 24 Desatinná časť: 0,04

Výstup je presne taký, aký očakávame. Problémom tu však je obmedzenie používania reťazca - čo znamená, že teraz nebudeme môcť vykonávať žiadne ďalšie aritmetické operácie.

4. Druhý prístup: Používanie BigDecimal

The BigDecimal triedy v Jave poskytuje svojmu používateľovi úplnú kontrolu nad správaním zaokrúhľovania. Táto trieda tiež poskytuje operácie pre aritmetiku, manipuláciu s mierkou, zaokrúhľovanie, porovnanie, hašovanie a prevod formátu.

Poďme použiť BigDecimal na získanie celých a desatinných častí čísla s pohyblivou rádovou čiarkou:

double doubleNumber = 24.04; BigDecimal bigDecimal = nový BigDecimal (String.valueOf (doubleNumber)); int intValue = bigDecimal.intValue (); System.out.println ("Dvojité číslo:" + bigDecimal.toPlainString ()); System.out.println ("Integer Part:" + intValue); System.out.println ("Desatinná časť:" + bigDecimal.subtract (nový BigDecimal (intValue)). ToPlainString ());

Výstupom bude:

Dvojité číslo: 24.04 Celočíselná časť: 24 Desatinná časť: 0,04

Ako vidíme vyššie, výstup je očakávaný. Aritmetické operácie môžeme vykonávať aj pomocou metód uvedených v BigDecimal trieda.

5. Záver

V tomto článku sme diskutovali o rôznych metódach na oddelenie celých a desatinných častí typov s pohyblivou rádovou čiarkou. Diskutovali sme tiež o výhodách používania BigDecimal pre výpočty s pohyblivou rádovou čiarkou.

Náš podrobný návod na BigDecimal a BigInteger v Jave tiež pojednáva o ďalších charakteristikách a scenároch použitia týchto dvoch tried.

Nakoniec je kompletný zdrojový kód tohto tutoriálu k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found