Pénzösszegek megjelenítése szavakkal

1. Áttekintés

Ebben az oktatóanyagban megtudhatjuk, hogyan alakíthatjuk át a pénzösszeget szómegjelenítéssé Java-ban.

Azt is megnézzük, hogyan nézhet ki egy egyedi megvalósítás egy külső könyvtáron keresztül - a Tradukisto.

2. Végrehajtás

Kezdjük először a saját megvalósításunkkal. Az első lépés kettő deklarálása Húr tömbök a következő elemekkel:

statikus húr [] egyek = {"", "egy", "kettő", "három", "négy", "öt", "hat", "hét", "nyolc", "kilenc", "tíz" , "tizenegy", "tizenkettő", "tizenhárom", "tizennégy", "tizenöt", "tizenhat", "tizenhét", "tizennyolc", "tizenkilenc"}; nyilvános statikus karakterlánc [] tens = {"", // 0 "", // 1 "húsz", // 2 "harminc", // 3 "negyven", // 4 "ötven", // 5 "hatvan ", // 6" hetven ", // 7" nyolcvan ", // 8" kilencven "// 9};

Amikor beérkezik egy bemenet, akkor az érvénytelen értékeket (nulla és negatív érték) kell kezelnünk. Miután megkapta az érvényes bevitelt, kiválthatjuk a dollár és cent számát változókba:

 hosszú dollár = (hosszú) pénz; hosszú cent = Math.kör ((pénz - dollár) * 100);

Ha a megadott szám kevesebb, mint 20, akkor megkapjuk a megfelelőt azok' elem a tömbből az index alapján:

if (n <20) {visszatérek [(int) n]; }

Hasonló megközelítést alkalmazunk a 100-nál kisebb számok esetében is, de most ezt kell használnunk tízes tömb is:

if (n <100) {visszatér tíz [[int] n / 10] + ((n% 10! = 0)? "": "") + one [(int) n% 10]; }

Hasonlóan tesszük ezt az ezernél kisebb számok esetében is.

Ezután rekurzív hívásokat használunk az egymilliónál kisebb számok kezelésére, az alábbiak szerint:

if (n <1_000_000) {return konvertálás (n / 1000) + "ezer" + ((n% 1000! = 0)? "": "") + konvertálás (n% 1000); }

Ugyanezt a megközelítést alkalmazzák az egymilliárdnál kisebb számoknál stb.

Itt van a fő módszer, amely meghívható ennek az átalakításnak a végrehajtására:

 public static String getMoneyIntoWords (dupla pénz) {hosszú dollár = (hosszú) pénz; hosszú cent = Math.kör ((pénz - dollár) * 100); if (pénz == 0D) {return ""; } if (pénz 0) {dollárrész = konvertálás (dollár) + "dollár" + (dollár == 1? "": "s"); } String centsPart = ""; if (cent> 0) {if (dollarParts.length ()> 0) {centPart = "és"; } centPart + = konvertálás (cent) + "cent" + (cent == 1? "": "s"); } return dollárrész + centrész; }

Teszteljük kódunkat, hogy megbizonyosodjon arról, hogy működik-e:

@Test public void whenGivenDollarsAndCents_thenReturnWords () {String várhatóResult = "kilencszázhuszonnégy dollár és hatvan cent"; assertEquals (várható eredmény, NumberWordConverter.getMoneyIntoWords (924.6)); } @Test public void whenTwoBillionDollarsGiven_thenReturnWords () {String várhatóResult = "kétmilliárd százharminchárommillió kétszáz" + "negyvenhétezernyolcszáz tíz dollár"; assertEquals (várhatóResult, NumberWordConverter.getMoneyIntoWords (2_133_247_810)); } @Test public void whenThirtyMillionDollarsGiven_thenReturnWords () {String várhatóResult = "harminchárom millió háromszáz negyvennyolc ezer kilencszáz hetvennyolc dollár"; assertEquals (várhatóResult, NumberWordConverter.getMoneyIntoWords (33_348_978)); }

Teszteljünk néhány éles esetet is, és győződjünk meg róla, hogy ezeket is lefedtük:

@Test public void whenZeroDollarsGiven_thenReturnEmptyString () {assertEquals ("", NumberWordConverter.getMoneyIntoWords (0)); } @Test public void whenNoDollarsAndNineFiveNineCents_thenCorrectRounding () {assertEquals ("kilencvenhat cent", NumberWordConverter.getMoneyIntoWords (0,959)); } @Test public void whenNoDollarsAndOneCent_thenReturnCentSingular () {assertEquals ("one cent", NumberWordConverter.getMoneyIntoWords (0,01)); } 

3. Könyvtár használata

Most, hogy a saját algoritmust megvalósítottuk, végezzük el ezt a konverziót egy meglévő könyvtár használatával.

Tradukisto egy Java 8+ könyvtár, amely segítségünkre lehet a számok szóábrázolássá alakításában. Először be kell importálnunk a projektünkbe (a könyvtár legújabb verziója itt található):

 pl.allegro.finance tradukisto 1.0.1 

Most már használhatjuk MoneyConverterek’S asWords () módszer ennek az átalakításnak a végrehajtásához:

public String getMoneyIntoWords (karakterlánc bemenet) {MoneyConverters converter = MoneyConverters.ENGLISH_BANKING_MONEY_VALUE; return converter.asWords (új BigDecimal (input)); }

Teszteljük ezt a módszert egy egyszerű tesztesettel:

@Test public void whenGivenDollarsAndCents_thenReturnWordsVersionTwo () {assertEquals ("háromszáz tíz £ 00/100", NumberWordConverter.getMoneyIntoWords ("310")); }

Ehhez használhatnánk az ICU4J könyvtárat is, de ez egy nagy könyvtár, és sok más olyan funkcióval rendelkezik, amelyek nem tartoznak a cikk hatálya alá.

Vessen egy pillantást azonban arra, hogy szükség van-e Unicode és globalizációs támogatásra.

4. Következtetés

Ebben a gyors cikkben két megközelítést láthattunk arról, hogyan lehet a pénzösszeget szavakká konvertálni.

Az itt ismertetett összes példának a kódja, és még sok más megtalálható a GitHubon.


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