A kettős szétválasztása egész és tizedes részekre

1. Áttekintés

Ebben az oktatóanyagban különböző módszereket fogunk felfedezni a lebegőpontos típusok egész és tizedes részének elválasztására a Java-ban, nevezetesen úszó és kettős.

2. Problémák a lebegőpontos típusokkal

Kezdjük azzal, hogy az elválasztás egyszerű töredékét és naiv módját nézzük át castingon keresztül:

dupla doubleNumber = 24,04; int intPart = (int) doubleNumber; System.out.println ("Dupla szám:" + dupla szám); System.out.println ("Egész szám:" + intPart); System.out.println ("Tizedes rész:" + (doubleNumber - intPart));

Amikor megpróbáljuk futtatni a fenti kódot, a következőket kapjuk:

Dupla szám: 24.04 egész szám: 24 tizedes rész: 0.03999999999999999915

Várakozásainkkal ellentétben a kimenet nem nyomtatja ki helyesen a tizedes részt. Ezért a lebegőpontos számok nem alkalmasak olyan számításokra, ahol a kerekítési hibák nem tolerálhatók.

3. Első megközelítés: A Húr

Először alakítsuk át a tizedes számot a-val Húr egyenértékű. Akkor fel tudjuk osztani a Húr a tizedesjegy indexnél.

Értsük meg ezt egy példával:

dupla doubleNumber = 24,04; String doubleAsString = String.valueOf (doubleNumber); int indexOfDecimal = doubleAsString.indexOf ("."); System.out.println ("Dupla szám:" + dupla szám); System.out.println ("Egész szám:" + doubleAsString.substring (0, indexOfDecimal)); System.out.println ("Tizedes rész:" + doubleAsString.substring (indexOfDecimal)); 

A fenti kód kimenete:

Dupla szám: 24.04 egész szám: 24 tizedes rész: .04

A kimenet pontosan az, amire számítunk. De itt a probléma a String használatának korlátozása - ami azt jelenti, hogy nem leszünk képesek más számtani műveletek végrehajtására.

4. Második megközelítés: Használat BigDecimal

A BigDecimal osztály a Java-ban biztosítja a felhasználó számára a kerekítési viselkedés teljes ellenőrzését. Ez az osztály számtani, méretarány-manipulációs, kerekítési, összehasonlítási, kivonatolási és formátumkonverziós műveleteket is biztosít.

Használjuk BigDecimal a lebegőpontos szám egész és tizedes részének lekérdezéséhez:

dupla doubleNumber = 24,04; BigDecimal bigDecimal = new BigDecimal (String.valueOf (doubleNumber)); int intValue = bigDecimal.intValue (); System.out.println ("Dupla szám:" + bigDecimal.toPlainString ()); System.out.println ("Egész szám:" + intValue); System.out.println ("Tizedes rész:" + bigDecimal.subtract (új BigDecimal (intValue)). ToPlainString ());

A kimenet a következő lesz:

Dupla szám: 24,04 egész szám: 24 tizedes rész: 0,04

Mint fent láthatjuk, a kimenet a vártnak felel meg. A számtani műveleteket a benne megadott módszerek segítségével is elvégezhetjük BigDecimal osztály.

5. Következtetés

Ebben a cikkben különféle módszereket vitattunk meg a lebegőpontos típusok egész és tizedes részének elválasztására. Megbeszéltük a használat előnyeit is BigDecimal lebegőpontos számításokhoz.

A Java-ban található BigDecimal és BigInteger részletes bemutatónk a két osztály további jellemzőit és használati forgatókönyveit tárgyalja.

Végül az oktatóanyag teljes forráskódja elérhető a GitHubon.


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