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.