Szám formázása Java-ban

1. Áttekintés

Ebben az oktatóanyagban megvizsgáljuk a Java-ban a számformázás különböző megközelítéseit és azok megvalósításának módját.

2. Alapvető számformázás a gombbal String # formátum

A String # formátum módszer nagyon hasznos a számok formázásához. A módszer két érvet tartalmaz. Az első argumentum leírja, hogy hány tizedesjegyet akarunk látni, a második argumentum a megadott érték:

kettős érték = 4,2352989244d; assertThat (String.format ("%. 2f", érték)). isEqualTo ("4.24"); assertThat (String.format ("%. 3f", érték)). isEqualTo ("4.235");

3. Tizedes formázás kerekítéssel

A Java-ban van két primitív típus, amelyek decimális számokat képviselnekúszó és decimális:

dupla myDouble = 7,8723d; float myFloat = 7,8723f;

A tizedesjegyek száma a végrehajtott műveletektől függően eltérő lehet. A legtöbb esetben csak az első pár tizedesjegy érdekel. Vizsgáljuk meg a tizedesjegy kerekítéssel történő formázásának néhány módját.

3.1. Használata BigDecimal a számformázáshoz

A BigDecimal osztály olyan módszereket kínál, amelyekkel meghatározott számú tizedesjegyig lehet kerekíteni. Hozzunk létre egy segítő módszert, amely kettős számot ad vissza, kerekítve a kívánt helyre:

public static double withBigDecimal (dupla érték, int helyek) {BigDecimal bigDecimal = new BigDecimal (value); bigDecimal = bigDecimal.setScale (helyek, RoundingMode.HALF_UP); return bigDecimal.doubleValue (); }

Kezdjük egy új példával BigDecimal eredeti tizedesértékünkkel. Azután, a skála beállításával megadjuk a kívánt tizedesjegyek számát és a szám kerekítésének módját. Ennek a módszernek a segítségével könnyen formázhatjuk a kettős érték:

kettős D = 4,2352989244d; assertThat (withBigDecimal (D, 2)). isEqualTo (4.24); assertThat (withBigDecimal (D, 3)). isEqualTo (4.235);

3.2. Használata Math # forduló

Kihasználhatjuk a statikus módszereket is a Math osztály kerek a kettős érték egy adott tizedesjegyig. Ebben az esetben megtehetjük a tizedesjegyek számát szorzással és később osztva állítsa be 10 ^ n. Ellenőrizzük segítő módszerünket:

nyilvános statikus kettős withMathRound (dupla érték, int helyek) {kettős skála = Math.pow (10, helyek); return Math.round (érték * skála) / skála; }
assertThat (withMathRound (D, 2)). isEqualTo (4.24); assertThat (withMathRound (D, 3)). isEqualTo (4.235);

Ez a módszer azonban csak bizonyos esetekben ajánlott, mivel a kimenetet néha másképpen lehet lekerekíteni, mint amire a nyomtatás előtt számítottunk.

Ez azért van, mert Math # forduló csonkolja az értéket. Nézzük meg, hogyan történhet ez meg:

System.out.println (withMathRound (1000.0d, 17)); // Ad: 92.23372036854776 !! System.out.println (withMathRound (260,775d, 2)); // Ad: 260,77 a várt 260,78 helyett 

Tehát a módszer csak tanulási célokra szerepel.

4. Különböző típusú számok formázása

Bizonyos esetekben érdemes formázni egy számot egy adott típushoz, például pénznemhez, nagy egész számhoz vagy százalékhoz.

4.1. Nagy egészek formázása kommákkal

Amikor az alkalmazásunkban nagy egész szám van, érdemes vesszővel megjeleníteni a használatával DecimalFormat előre meghatározott mintával:

public static String withLargeIntegers (double value) {DecimalFormat df = new DecimalFormat ("###, ###, ###"); return df.format (érték); } int érték = 123456789; assertThat (withLargeIntegers (érték)). isEqualTo ("123 456 789");

4.2. Szám kitöltése

Bizonyos esetekben érdemes egy számot egy megadott hosszúságú nullákkal kitölteni. Itt használhatjuk a String # formátum módszer, a korábban leírtak szerint:

public static String byPaddingZeros (int érték, int paddingLength) {return String.format ("% 0" + paddingLength + "d", érték); } int értéke = 1; assertThat (byPaddingOutZeros (érték, 3)). isEqualTo ("001");

4.3. Számok formázása két nullával a tizedesjegy után

Annak érdekében, hogy bármelyik számot a tizedesjegy után két nullával kinyomtathassuk, még egyszer használjuk fel DecimalFormat osztály előre definiált mintával:

nyilvános statikus kettős withTwoDecimalPlaces (dupla érték) {DecimalFormat df = new DecimalFormat ("#. 00"); return new Double (df.formátum (érték)); } int értéke = 12; assertThat (withTwoDecimalPlaces (érték)). isEqualTo (12.00);

Ebben az esetben, létrehoztunk egy új formátumot, amelynek mintája két nullát határoz meg a tizedespont után.

4.4. Formázás és százalékok

Időről időre előfordulhat, hogy százalékokat kell megjelenítenünk.

Ebben az esetben használhatjuk a NumberFormat #getPercentInstance módszer. Ez a módszer lehetővé teszi számunkra a Területi beállítás az értéket a megadott országnak megfelelő formátumban nyomtassa:

public static String forPercentages (kettős érték, Locale locale) {NumberFormat nf = NumberFormat.getPercentInstance (locale); return nf.format (érték); } dupla érték = 25f / 100f; assertThat (forPercentages (érték, új locale ("en", "US"))). isEqualTo ("25%");

4.5. Pénznemszám formázása

Alkalmazásunkban a pénznemek tárolásának általános módja a BigDecimal. Mi van, ha meg akarjuk jeleníteni őket a felhasználó számára? Ebben az esetben használhatjuk a NumberFormat osztály:

public static String currencyWithChosenLocalisation (kettős érték, Locale locale) {NumberFormat nf = NumberFormat.getCurrencyInstance (locale); return nf.format (érték); }

Megkapjuk az adott pénznem példányát Területi beállítás majd egyszerűen hívja a formátum módszer az értékkel. Az eredmény a megadott ország pénznemeként megjelenő szám:

kettős érték = 23_500; assertThat (currencyWithChosenLocalisation (érték, új területi beállítás ("en", "US"))). isEqualTo ("23 500,00 USD"); assertThat (currencyWithChosenLocalisation (érték, új területi beállítás ("zh", "CN"))). isEqualTo ("23 500,00 ¥"); assertThat (currencyWithChosenLocalisation (érték, új területi beállítás ("pl", "PL"))). isEqualTo ("23 500 zł");

5. Speciális formázási használati esetek

DecimalFormat az egyik legnépszerűbb módszer a decimális szám formázására Java-ban. Az előző példákhoz hasonlóan írunk egy segítő módszert:

public static double withDecimalFormatLocal (double value) {DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance (Locale.getDefault ()); return new Double (df.formátum (érték)); }

A formázás típusunk megkapja az alapértelmezett beállítást egy adott lokalizációhoz.

A tizedes formázást az egyes országokban másként kezelik numerikus rendszereikkel. Például a csoportosító karakter (vessző az Egyesült Államokban, de szóköz vagy pont más nyelveken), a csoportosítás mérete (három az Egyesült Államokban és a legtöbb nyelv, de Indiában eltérő), vagy a tizedes karakter vessző más helyeken).

kettős D = 4,2352989244d; assertThat (withDecimalFormatLocal (D)). isEqualTo (4.235);

Ezt a funkciót kibővíthetjük néhány konkrét mintával:

nyilvános statikus kettős withDecimalFormatPattern (dupla érték, int helyek) {DecimalFormat df2 = new DecimalFormat ("#, ###, ###, ## 0.00"); DecimalFormat df3 = new DecimalFormat ("#, ###, ###, ## 0,000"); if (helyek == 2) adjon vissza új Double (df2.formátum (érték)); else if (helyek == 3) return new Double (df3.formátum (érték)); másképp dobjon új IllegalArgumentException () -t; } assertThat (withDecimalFormatPattern (D, 2)). isEqualTo (4.24); assertThat (withDecimalFormatPattern (D, 3)). isEqualTo (4.235);

Itt engedélyezzük a felhasználónknak a konfigurálást DecimalFormat a szóközök alapján kiválasztott mintával.

6. Következtetés

Ebben a cikkben röviden áttekintettük a számok formázásának különböző módjait a Java-ban. Mint láthatjuk, erre nincs egyetlen legjobb módszer. Számos megközelítést lehet követni, mivel mindegyiknek megvannak a maga sajátosságai.

Mint mindig, ezeknek a példáknak a kódja elérhető a GitHub oldalon.


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