Da numero a testo

E' l'area in cui è possibile condividere funzioni personalizzate nate dalla creatività e l'esperienza degli sviluppatori FileMaker

Moderatore: Moderatori

Rispondi
raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Da numero a testo

Messaggio da raybaudi » domenica 28 ottobre 2012, 3:23

Ne ho voluto scrivere una anch'io...

Codice: Seleziona tutto

/*
NumeroInLettere ( number ) Custom Function

Scrive in lettere numeri fino al massimo di 999.999.999.999,99 cioè:
novecentonovantanovemiliardinovecentonovantanovemilioninovecentonovantanovemilanovecentonovantanove/99
( 12 cifre + 2 decimali )

Daniele Raybaudi
*/

Case(
number ≤ 10^12 - 1 + ,99 ;
Let([
t = Substitute ( NumToJText ( Int ( number ) ; 1 ; 0 ) ; "," ; ¶ ) ;
decimali = Mod ( Abs ( number ) ; 1 ) ;
$i_NumeroInLettereCF = $i_NumeroInLettereCF + 1 ;
v = ValueCount ( t ) - $i_NumeroInLettereCF ;
n = GetAsNumber ( GetValue ( t ; $i_NumeroInLettereCF ) ) ;
result = 
If ( Div ( n ; 100 ) ; Choose ( Div ( n ; 100 ) ; "" ; "" ; "due" ; "tre" ; "quattro" ; "cinque" ; "sei" ; "sette" ; "otto" ; "nove" ) & "cento" )
& 
Case(
Mod ( n ; 100 ) < 20 ; Choose ( Mod ( n ; 100 ) ; "" ; "uno" ; "due" ; "tre" ; "quattro" ; "cinque" ; "sei" ; "sette" ; "otto" ; "nove" ; "dieci" ; "undici" ; "dodici" ; "tredici" ; "quattordici" ; "quindici" ; "sedici" ; "diciassette" ; "diciotto" ; "diciannove"  ) ;
Mod ( n ; 100 ) < 30 ; "vent" & Choose ( Right ( Mod ( n ; 100 ) ; 1 ) ; "i" ; "uno" ; "idue" ; "itre" ; "iquattro" ; "icinque" ; "isei" ; "isette" ; "otto" ; "inove" ) ;
Choose ( Left ( Mod ( n ; 100 ) ; 1 ) ; "" ; "" ; "" ; "trent" ; "quarant" ; "cinquant" ; "sessant" ; "settant" ; "ottant" ; "novant" ) & Choose ( Right ( Mod ( n ; 100 ) ; 1 ) ; "a" ; "uno" ; "adue" ; "atre" ; "aquattro" ; "acinque" ; "asei" ; "asette" ; "otto" ; "anove" ) 
)
];
Case(
$i_NumeroInLettereCF < ValueCount ( t ) ; If ( n > 1 ; result ) & Case ( v = 3 and n = 1 ; "unmiliardo" ;
                                                                         v = 3 and n ; "miliardi" ;
                                                                         v = 2 and n = 1 ; "unmilione" ;
                                                                         v = 2 and n ; "milioni" ;
                                                                         v = 1 and n = 1 ; "mille" ;
                                                                         v = 1 and n ; "mila"
                                                                        ) & NumeroInLettere ( number ) ;
result & If ( not t ; "zero" ) & "/" & Left ( Substitute ( decimali ; Left ( 1/2 ; 1 ) ; "" ) & "00" ; 2 ) & Let( $i_NumeroInLettereCF = "" ; "" )
)
) ;
"Errore: numero troppo alto"
)
Raybaudi FMP 12 Adv. Windows XP SP3

Pirata
Messaggi: 1197
Iscritto il: domenica 12 marzo 2006, 1:00
Versione FileMaker: 18
Sistema operativo: Win10
Località: Reggio Calabria (RC)

Re: Da numero a testo

Messaggio da Pirata » lunedì 19 novembre 2012, 12:27

Ottino Ray. ;-)
Antonio

Avatar utente
PIG-NAH
Messaggi: 2564
Iscritto il: martedì 7 agosto 2007, 2:00
Località: BIG BANG

Re: Da numero a testo

Messaggio da PIG-NAH » domenica 15 febbraio 2015, 11:22

Casi ( number ≤ 10^15 - 1 + ,99 ;

Variando da 10^12 a 10^15 e aggiungendo i seguenti 3 passaggi al calcolo:

v = 4 and n = 1 ; "mille" ;
v = 4 and n ; "mila" ;
v = 3 and n = 1 and ConteggioValore ( t ) > 4 ; "unomiliardi" ;

Si aggiunge una ricorrenza alla CF del mitico Ray ( da v=3 a v=4 ) e adesso va bene pure per il debito pubblico italiano :mrgreen:
FM8 ADV XP SP3

Rispondi