Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Delphi] Da cifra a lettere

    Ciao a tutti,
    ho scritto questa funzione per convertire una certa cifra (somma di denaro nella fattispecie) in lettere:

    codice:
    function CifraLettere(cifra: string): string; export;
     function NrUnita(cifra: char): string;
     begin
      case cifra of
       '1': Result := 'uno';    '2': Result := 'due';
       '3': Result := 'tre';    '4': Result := 'quattro';
       '5': Result := 'cinque'; '6': Result := 'sei';
       '7': Result := 'sette';  '8': Result := 'otto';
       '9': Result := 'nove';
      end;
     end;
     var lettere: string;
    begin
     //Trasformazione MIGLIAIA
     if Length(cifra) = 4 then
      if cifra[1] = '1' then lettere := 'mille'
       else lettere := NrUnita(cifra[1]) + 'mila';
     //Trasformazione CENTINAIA
     if (Length(cifra) = 4) or (Length(cifra) = 3) then
      if not (cifra[Length(cifra) - 2] = '0') then
       if cifra[Length(cifra) - 2] = '1' then lettere := lettere + 'cento'
        else lettere := lettere + NrUnita(cifra[Length(cifra) - 2]) + 'cento';
     //Trasformazione DECINE
     if (Length(cifra) >= 2) and not (StrToInt(AnsiLeftStr(AnsiRightStr(cifra, 2), 1)) = 1)
      and not (StrToInt(AnsiRightStr(cifra, 1)) = 1) and not (StrToInt(AnsiRightStr(cifra, 1)) = 8) then
     begin
      case cifra[Length(cifra) - 1] of
       '2': lettere := lettere +'venti';    '3': lettere := lettere +'trenta';
       '4': lettere := lettere +'quaranta'; '5': lettere := lettere +'cinquanta';
       '6': lettere := lettere +'sessanta'; '7': lettere := lettere +'settanta';
       '8': lettere := lettere +'ottanta';  '9': lettere := lettere +'novanta';
      end;
     end else
     if (Length(cifra) >= 2) and ((StrToInt(AnsiRightStr(cifra, 1)) = 1) and not (StrToInt(AnsiLeftStr(AnsiRightStr(cifra, 2), 1)) = 1)) or (StrToInt(AnsiRightStr(cifra, 1)) = 8) then
     begin
      case cifra[Length(cifra) - 1] of
       '2': lettere := lettere +'vent';    '3': lettere := lettere +'trent';
       '4': lettere := lettere +'quarant'; '5': lettere := lettere +'cinquant';
       '6': lettere := lettere +'sessant'; '7': lettere := lettere +'settant';
       '8': lettere := lettere +'ottant';  '9': lettere := lettere +'novant';
      end;
     end else
     if (Length(cifra) >= 2) and (StrToInt(AnsiLeftStr(AnsiRightStr(cifra, 2), 1)) = 1) then
     begin
      case StrToInt(AnsiRightStr(cifra, 2)) of
       10: lettere := lettere +'dieci';       11: lettere := lettere +'undici';
       12: lettere := lettere +'dodici';      13: lettere := lettere +'tredici';
       14: lettere := lettere +'quattordici'; 15: lettere := lettere +'quindici';
       16: lettere := lettere +'sedici';      17: lettere := lettere +'diciassette';
       18: lettere := lettere +'diciotto';    19: lettere := lettere +'diciannove';
      end;
     end;
     //Trasformazione UNITA'
     if (Length(Cifra) >= 1) then
      if (Length(cifra) >= 2) and ((StrToInt(AnsiLeftStr(AnsiRightStr(cifra, 2), 1)) > 1) or (StrToInt(AnsiLeftStr(AnsiRightStr(cifra, 2), 1)) = 0)) then
       lettere := lettere + NrUnita(cifra[Length(cifra)])
        else if (Length(cifra) = 1) then
         lettere := lettere + NrUnita(cifra[Length(cifra)]);
     Result := lettere;
    end;
    La funzione non gestisce i decimali in quanto essi vengono eventualmente aggiunti come "/xx" dopo la cifra in lettere:

    es. 1999,31 --> millenovecentonovantanove / 31

    La posto prima di tutto per condividerla... può sempre essere utile. In secondo luogo vi chiedo: è possibile ottimizzarla o migliorarla?

    Stefano

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da peste1
    La posto prima di tutto per condividerla... può sempre essere utile. In secondo luogo vi chiedo: è possibile ottimizzarla o migliorarla?
    Ottimizzarla o migliorarla in quali aspetti?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Efficienza del codice...
    Forse è possibile ridurre la porzione di codice?

    Mmmm....
    Stefano

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.