HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Számértékek megjelenítése szöveggel


Példaprogram letöltése

8444 bájt

Gyakran előfordul, hogy egy nyomtatványon egy számot szöveggel is meg kell jeleníteni (pl. csekkek, számlák). Cikkünkben egy olyan metódust készítünk és használunk fel a mellékelt alkalmazásban, mely tetszőleges bemenő egész számot (pénzértéket) képes karakteres formában, a szabályoknak megfelelően tagolva, és szükség szerint szeparátor-karakterrel kiegészítve visszaadni.

A műveletvégző MoneyToString metódust egy osztály statikus függvényeként hozzuk létre. A létrehozandó metódus az 1 milliárdos nagyságrend alatti értékeket képes szöveggé konvertálni.
Létrehoztunk tehát egy Converter nevű osztályt az alkalmazás NTSConverter névterében, melyet a Converter.cs állományban helyezünk el:
using System;
namespace NTSConverter
{
  public class Converter
  {
Deklarálunk három tömböt a karakterláncoknak, melyeket meghatározott logika szerint adunk az eredmény-karakterlánchoz.
    private static string[] CONES = {"", "egy", "kettő", "három", "négy", "öt", "hat", "hét", "nyolc", "kilenc"};
    private static string[] CTENS = {"", "tíz", "húsz", "harminc", "negyven", "ötven", "hatvan", "hetven", "nyolcvan", "kilencven"};
    private static string[] CUTAG = {"", "ezer", "millió"};
Felveszünk egy változót az eredmény karakterlánc számára, valamint egyet az esetleges elválasztás-jel tárolására, melyet 2000-nél nagyobb értékű számok esetén szúrunk be a karakterláncba, a helyesírási szabályoknak megfelelően.
    private static string sep = "";
    private static string resultString = "";
A statikus metódusnak szüksége van néhány műveletre, melyeket szintén statikus metódusokban helyeztünk el, hogy azok elérhetők legyenek az osztály példányosítása nélkül. Az első művelet a paraméterként kapott karakterláncot az eredmény lánc elé szúrja, valamint megvizsgálja, hogy szükséges-e elválasztójelet beszúrni a karakterláncba. Szükség esetén beszúrja:
    private static void AddNum(string ns,Int64 money)
    {
      resultString = ns + resultString;
      if ((resultString != "") && (money > 2000))
      {
        sep = "-";
      }
    }
A második műveletben a CONES tömb egy elemét adja vissza a metódus attól függően, hogy a megadott számérték karakterlánccá alakítva milyen hosszal rendelkezik:
    private static string Ones(string moneyStr,int moneyStrLen)
    {
      string res = CONES[Convert.ToByte(moneyStr[moneyStrLen-1]) - 48];
      return res;
    }
A harmadik művelet a CTENS karaktertömb egy elemét adja vissza attól függően, hogy éppen melyik elemét vizsgáljuk a számértékből képzett karakterláncnak:
    private static string Tens(string moneyStr,int moneyStrLen)
    {
      string res = "";
      switch(moneyStr[moneyStrLen])
      {
Ha az adott karakter 1, akkor két értéket adhat vissza a függvény attól függően, hogy a karaktert nulla követi vagy sem:
        case '1':
          if (moneyStr[moneyStrLen+1] == '0')
          {
            res = "tíz";
          }
          else
          {
            res = "tizen";
          }
          break;
Csakúgy, mint 2 esetén:
        case '2':
          if (moneyStr[moneyStrLen+1] == '0')
          {
            res = "húsz";
          }
          else
          {
            res = "huszon";
          }
          break;
Minden egyéb esetben:
        default:
          res = CTENS[Convert.ToByte(moneyStr[moneyStrLen]) - 48];
          break;
      }
      return res;
    }
A MoneyToString metódus pedig a következőképpen épül fel: először deklarálunk néhány segédváltozót, majd megvizsgáljuk, hogy a megadott érték nulla, vagy sem:
    public static string MoneyToString(Int64 money)
    {      
      resultString = "";
      sep = "";
      string moneyStr = "";
      int moneyStrLen = 0;
      int i1 = 0;
      int i2 = 0;
      int i3 = 0;
      if (money != 0)
      {
Ha nem nulla, akkor ellenőrizzük, hogy a megadott szám tíznél kisebb számjegy hosszú-e:
        moneyStr = Convert.ToString(Math.Abs(money));
        moneyStrLen = moneyStr.Length;
        if (moneyStrLen < 10)
        {
Ha igen, akkor elindítunk egy ciklust, melyben csökkentjük a karakterlánc hosszát megadó értéket, amíg az nagyobb, mint 0:
          while (moneyStrLen > 0)
          {
            ...
            moneyStrLen--;
          }
A logika lényege, hogy a megadott számot reprezentáló karakterláncot elemezve fűzzük a lánc elejére a részláncokat, míg végül megkapjuk a teljes szöveget. Természetesen a negatív számok kezelése is megvalósul, ennek érdekében egy ’mínusz’ szó kerül a szöveg elejére:
          if (money < 0)
          {
            resultString = "mínusz " + resultString;
          }
        }
A tíz karakternél hosszabb számok esetén hibajelzést adunk:
        else
        {
          resultString = "Az érték túl nagy, így nem konvertálható! A konvertálás 9 számjegyig működik!";
        }
      }
Nullát megadva konvertálandó értékként a ’nulla’ szót adjuk vissza:
      else
      {
        resultString = "nulla";
      }      
      return resultString;
    }
  }
}
A programban felhasználjuk a MoneyToString statikus metódust, a ’Konvertálás’ feliratú gombra kattintva a megadott számérték az ’Eredmény’ feliratú szövegmezőben jelenik meg konvertálva.

Cikksorozat

#IDKategóriaCikk címeSorozat
1621DelphiMySQL szerverek elérése Delphi-ből1. rész
1632DelphiMySQL szerverek elérése Delphi-ből2. rész
1641DelphiMySQL szerverek elérése Delphi-ből3. rész
1649DelphiMySQL szerverek elérése Delphi-ből4. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 45. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |