Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Convertire numeri in lettere

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: archimede, Triumph Of Steel

Convertire numeri in lettere

Postdi miko » 04/01/19 18:35

Buonasera, saluti a tutti gli utenti
non conosco il linguaggio del pdf, ho iniziato da pochi giorni a scrivere semplici script;
trovo poco materiale in rete;
sto cercando di modificare il seguente codice, perfettamente funzionante ma purtroppo fornisce il risultato in inglese;

Codice: Seleziona tutto
function ConvertToHundreds(num)
{
aTens = [ "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"];
aOnes = [ "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen",
"Eighteen", "Nineteen" ];

var cNum, nNum;
var cWords = "";

num %= 1000;
if (num > 99) {
/* Hundreds. */
cNum = String(num);
nNum = Number(cNum.charAt(0));
cWords += aOnes[nNum] + " Hundred";
num %= 100;
if (num > 0)
cWords += " and "
}

if (num > 19) {
/* Tens. */
cNum = String(num);
nNum = Number(cNum.charAt(0));
cWords += aTens[nNum - 2];
num %= 10;
if (num > 0)
cWords += "-";
}

if (num > 0) {
/* Ones and teens. */
nNum = Math.floor(num);
cWords += aOnes[nNum];
}

return cWords;
}

function ConvertToWords(num)
{
var aUnits = [ "Thousand", "Million", "Billion", "Trillion", "Quadrillion" ];
var cWords = (num >= 1 && num < 2) ? "Dollar and " : "Dollars and ";
var nLeft = Math.floor(num);
for (var i = 0; nLeft > 0; i++) {
if (nLeft % 1000 > 0) {
if (i != 0)
cWords = ConvertToHundreds(nLeft) + " " + aUnits[i - 1] + " " + cWords;
else
cWords = ConvertToHundreds(nLeft) + " " + cWords;
}
nLeft = Math.floor(nLeft / 1000);
}
num = Math.round(num * 100) % 100;
if (num > 0)
cWords += ConvertToHundreds(num) + " Cents";
else
cWords += "Zero Cents";

return cWords;
}


inserendo dei numeri in una textbox del pdf , il codice converte i numeri in lettere del tipo bollettini postali, e restituisce la conversione, lettere, in una altra textbox.
ho provato a modificare il codice, per quello che riesco ad interpretare, ma continuo ad ottenere il risultato in inglese.
come e dove devo modificare il codice per ottenere il risultato in italiano?
ciao, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Sponsor
 

Postdi archimede » 10/01/19 09:23

miko ha scritto:ho provato a modificare il codice
Mostraci il codice con le tue modifiche.

Alessandro
archimede
Moderatore
 
Post: 2834
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi alfrimpa » 10/01/19 14:27

Secondo me basterebbe sostituire le stringhe inglesi (messe tra virgolette) con le corrispondenti traduzioni in italiano.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1178
Iscritto il: 30/12/13 17:01
Località: Napoli

Postdi miko » 13/02/19 18:30

Salve,
nel poco tempo libero che ho avuto ho "studiato" questo strano linguaggio
ed ora c'e' molta confusione e poca conclusione.
avevo gia' provveduto a tradurre, come suggerito da alfrimpa, ma non puo' funzionare per via della
diversa lingua;
ad esempio il numero 121 si trasforma in inglese : one hundred and twentyone
che tradotto alla lettera diventa : UNO CENTO E VENTI UNO
per noi invece e' semplicemente : CENTOVENTUNO
faccio notare la presenza dell' UNO iniziale, presente anche in cifre superiori, migliaia-milioni,
che dovrebbe essere UN MILIONE, UN MILIARDO etc, e nei numeri del tipo 21, 58, 248, etc
per un corretto italiano, dovrebbe troncarsi la prima parola in modo da avere
VENTUNO, CINQUANTOTTO, cosa che non avviene con il codice originale anche traducendo in italiano
i termini inglesi.
provando a comprendere il codice sono riuscito ad ottenere questo risultato:

se elimino

Codice: Seleziona tutto
if (num > 19) {
/* Tens. */
cNum = String(num);
nNum = Number(cNum.charAt(0));
cWords += aTens[nNum - 2];
num %= 10;
if (num > 0)
cWords += "-";
}


ed inserisco

Codice: Seleziona tutto
if (num >= 200) {
/* Hundreds. */
cNum = String(num);
nNum = Number(cNum.charAt(0));
cWords += aOnes[nNum] + "CENTO";
num %= 100;
if (num > 0)
cWords += ""
}

if (num > 19 && num <= 99) {
/* Tens. */
cNum = String(num);
nNum = Number(cNum.charAt(0));
cWords += aTens[nNum - 2];
num %= 10;
if (num > 0)
cWords += "";
}

e sostituisco la linea evidenziata

Codice: Seleziona tutto
......
if (nLeft % 1000 > 0) {
if (i != 0)
cWords = ConvertToHundreds(nLeft) + " " + aUnits[i - 1] + " " + cWords; <<<<<<<<<<<<<<<<
else
cWords = ConvertToHundreds(nLeft) + " " + cWords;
}
.........


con

Codice: Seleziona tutto
cWords = aUnits[i - 1] + ConvertToHundreds(nLeft - 1) + cWords;

il codice funziona per numeri compresi tra 1 e 1999,99
al di fuori di questo range non funziona per la presenza dell' UNO che scrivevo all'inizio
se incece alla linea evidenziata sostituisco questa

Codice: Seleziona tutto
cWords = ConvertToHundreds(nLeft) + " " + aUnits[i - 1] + " " + cWords;

il codice non funziona per il range precedente, ma funziona per cifre superiori da 1999,99 in poi etc,
non ricordo i limiti.
non riesco a metterle insieme, o funziona una oppure l'altra, in ogni caso deve essere presente la linea

Codice: Seleziona tutto
.......
else
cWords = ConvertToHundreds(nLeft) + " " + cWords;
........


non riesco ad interpretare il ciclo for

Codice: Seleziona tutto
.....
for (var i = 0; nLeft > 0; i++) {
if (nLeft % 1000 > 0) {
if (i != 0)
......


che secondo me e' alla base della conversione;
se qualcuno di voi conosce il linguaggio e puo' spiegarlo forse riusciamo ad ottenere la conversione,
che pare sia molto richiesta.
dalle mie ricerche, in internet, questa conversione e' fonte di topic in vari forum, si trova la conversione in quasi tutte
le lingue ma purtroppo non in italiano.
saluti grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Postdi archimede » 15/02/19 15:19

Lo sommarie prove che ho fatto sono tutt'altro che esaustive, per cui è facile che mi siano sfuggiti dei casi non correttamente gestiti, ma questa forse può essere una base di partenza:
Codice: Seleziona tutto
function ConvertToHundreds(num)
{
   aTens = ["venti", "trenta", "quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta"];
   aOnes = ["zero", "uno", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove",
            "dieci", "undici", "dodici", "tredici", "quattordici", "quindici", "sedici", "diciassette", "diciotto", "diciannove"];

   var cNum, nNum;
   var cWords = "";

   num %= 1000;
   if (num > 99)
   {
      /* Hundreds. */
      cNum = String(num);
      nNum = Number(cNum.charAt(0));
      if (nNum > 1) cWords += aOnes[nNum];
      cWords += "cento";
      num %= 100;
   }

   if (num > 19)
   {
      /* Tens. */
      cNum = String(num);
      nNum = Number(cNum.charAt(0));
      cWords += aTens[nNum - 2];
      num %= 10;
   }

   if (num > 0)
   {
      /* Ones and teens. */
      nNum = Math.floor(num);
      cWords += aOnes[nNum];
   }

   return cWords;
}

function ConvertToWords(num)
{
   var aUnit = ["mille", "unmilione", "unmiliardo", "trillione", "quadrillione"];
   var aUnits = ["mila", "milioni", "miliardi", "trillioni", "quadrillioni"];
   var cWords = "";
   var nLeft = Math.floor(num);

   for (var i = 0; nLeft > 0; i++)
   {
      if (nLeft % 1000 > 0)
      {
         if (i != 0)
         {
            if (ConvertToHundreds(nLeft) === 'uno')
               cWords = aUnit[i - 1] + cWords;
            else
               cWords = ConvertToHundreds(nLeft) + aUnits[i - 1] + cWords;
         }
         else
            cWords = ConvertToHundreds(nLeft) + cWords;
      }
      nLeft = Math.floor(nLeft / 1000);
   }

   cWords = cWords.charAt(0).toUpperCase() + cWords.slice(1);
   cWords = cWords.replace("entiuno", "entuno");
   cWords = cWords.replace("antauno", "antuno");
   num = Math.round(num * 100) % 100;
   if (num > 0)
      cWords += " Euro e " + ConvertToHundreds(num) + " Centesimi";
   else
      cWords += " Euro";

   return cWords;
}
PS: dimenticavo di dire che il linguaggio qui presentato è Javascript e non so se è compatibile con il "linguaggio del pdf", qualsiasi cosa questo significhi.
archimede
Moderatore
 
Post: 2834
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi miko » 23/02/19 15:25

salve,
la mia imprecisione ... "linguaggio del pdf", ... è dovuta al fatto che nelle ricerche di argomenti
relativi ai codici da inserire nei moduli o nel documento del pdf, il web fornisce molteplici risultati
per il javascript per le pagine web,html, e quasi niente per i moduli pdf;
devo sempre cercare di specificare in qualche modo di quale javascript si tratti, e così ho voluto evidenziare,
impropriamente, a cosa si riferiva il codice che vi ho mostrato.
ho capito che il javascript per il web e quello per il pdf sono molto simili.
nonostante la mia imprecisione sei riuscito ad interpretare il mio pensiero ed hai realizzato un ottimo codice, grazie.
se questo è
...una base di partenza...

immagino cosa sarà il codice definitivo.
il codice funziona, ha bisogno solo di rivedere qualche piccolo dettaglio.
per i numeri del tipo 31 38 48 etc no viene troncata la prima parola, ma si ha trentauno etc
ho modificato in questo modo:

Codice: Seleziona tutto
..........
   cWords = cWords.charAt(0).toUpperCase() + cWords.slice(1);
   cWords = cWords.replace("entiuno", "entuno"); <<< esistente
   cWords = cWords.replace("entauno", "entuno"); <<<aggiunta
   cWords = cWords.replace("antauno", "antuno"); <<< esistente
   cWords = cWords.replace("entiotto", "entotto"); <<<aggiunta
   cWords = cWords.replace("entaotto", "entotto"); <<<aggiunta
   cWords = cWords.replace("antaotto", "antotto"); <<<aggiunta
..............


e questo, è stato semplice, funziona ma solo per i numeri interi ma non per i decimali;
non riesco a modificare anche per i decimali.

invece di avere 6 linee del tipo, cWords = cWords.replace("entiuno", "entuno"); come sopra, esiste la possibilità
di condensare il codice in una sola linea scrivendo ad esempio
se cWords è composto da venti, trenta ... più uno oppure otto allora : tronca la prima parola
usando scorrettamente il ciclo if
if cWords = aTens(0) (= "venti") + aOnes(1) (="uno") then cWords = "vent" + "uno" = "ventuno"
e così per gli altri casi.

non vi è distinzione tra singolare e plurale
nel caso del solo numero uno intero o decimale, 1,00 oppure 0,01 dovrebbe risultare " un Euro" oppure " un Centesimo"
così per numeri tipo 1,12 risulta " uno Euro e dodici Centesimi"
il plurale deve risultare nei numeri maggiori, es. due Euri, dieci Euri, quindici Centesimi.
anche qui ho provato ma il risultato finale è errato.

nel caso che la parte intera sia 0 con 2 decimali, es 0,12
dovrebbe risultare soltanto " dodici Centesimi"
mentre ora si ha " Euro e dodici Centesimi"

infine solo per completezza, ma non necessario ai fini del calcolo, per il numero 0,00
dovrebbe risultare " zero Euri e zero Centesimi"

sto continuando a testare il codice cercando di modificare i problemi elencati ma fino ad ora non sono riuscito.
ciao e grazie.
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Postdi archimede » 23/02/19 16:50

Codice: Seleziona tutto
function ConvertToHundreds(num)
{
   aTens = ["venti", "trenta", "quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta"]
   aOnes = ["zero", "uno", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove",
            "dieci", "undici", "dodici", "tredici", "quattordici", "quindici", "sedici", "diciassette", "diciotto", "diciannove"]

   var cNum, nNum
   var cWords = ""

   num %= 1000
   if (num > 99)
   {
      /* Hundreds. */
      cNum = String(num)
      nNum = Number(cNum.charAt(0))
      if (nNum > 1) cWords += aOnes[nNum]
      cWords += "cento"
      num %= 100
   }

   if (num > 19)
   {
      /* Tens. */
      cNum = String(num)
      nNum = Number(cNum.charAt(0))
      cWords += aTens[nNum - 2]
      num %= 10
   }

   if (num > 0)
   {
      /* Ones and teens. */
      nNum = Math.floor(num)
      cWords += aOnes[nNum]
   }

   return cWords
}

function ConvertToWords(num)
{
   var aUnit = ["mille", "unmilione", "unmiliardo", "trillione", "quadrillione"]
   var aUnits = ["mila", "milioni", "miliardi", "trillioni", "quadrillioni"]
   var cWords = ""
   var nLeft = Math.floor(num)

   for (var i = 0; nLeft > 0; i++)
   {
      if (nLeft % 1000 > 0)
      {
         if (i != 0)
         {
            if (ConvertToHundreds(nLeft) === 'uno')
               cWords = aUnit[i - 1] + cWords
            else
               cWords = ConvertToHundreds(nLeft) + aUnits[i - 1] + cWords
         }
         else
            cWords = ConvertToHundreds(nLeft) + cWords
      }
      nLeft = Math.floor(nLeft / 1000)
   }

   cWords = cWords.charAt(0).toUpperCase() + cWords.slice(1)
   if (cWords.trim()) cWords += " Euro"

   num = Math.round(num * 100) % 100
   if (num > 0)
   {
      if (cWords.trim())
         cWords += " e " + ConvertToHundreds(num) + " Centesimi"
      else
      {
         cWords = ConvertToHundreds(num)
         cWords = cWords.charAt(0).toUpperCase() + cWords.slice(1) + " Centesimi"
      }
   }

   var regex = /(nt[a|i])([u|o])/gi
   if (cWords.match(regex)) cWords = cWords.replace(regex, 'nt$2')

   if (!cWords.trim()) cWords = "Zero Euro e zero Centesimi"

   return cWords
}

miko ha scritto:non riesco a modificare anche per i decimali.
Fatto.
miko ha scritto:invece di avere 6 linee del tipo, cWords = cWords.replace("entiuno", "entuno"); come sopra, esiste la possibilità
di condensare il codice in una sola linea scrivendo ad esempio se cWords è composto da venti, trenta ... più uno oppure otto allora : tronca la prima parola
Una sola linea la vedo dura: potresti infarcire il codice di if, ma dubito che sarebbe più leggibile. Comunque ho ridotto a due righe il tutto.
miko ha scritto:non vi è distinzione tra singolare e plurale
Che Euro abbia un plurale mi giunge nuova (oltre a suonare orrendo): http://www.treccani.it/enciclopedia/tag/euro/

Per i centesimi non dovrebbe essere difficile: lascio a te il divertimento. ;)
miko ha scritto:nel caso che la parte intera sia 0 con 2 decimali, es 0,12
dovrebbe risultare soltanto " dodici Centesimi"
Fatto.
miko ha scritto:per il numero 0,00 dovrebbe risultare " zero Euri e zero Centesimi"
Fatto.

Alessandro

PS: per la questione del plurale puoi forse cavartela usando i simboli e ¢
archimede
Moderatore
 
Post: 2834
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi miko » 21/03/19 07:43

Buongiorno,
Perdona il mio ritardo, ma molti impegni e poco tempo libero.
Molti giorni addietro avevo visto il tuo ultimo inserimento, ma non ho avuto il tempo di apprezzare le tue modifiche né di testare il codice.
A questo proposito, prima di esprimermi in merito a questo topic , ho pensato di realizzare un codice che mi permetta di rendere più veloce e preciso il test;
ma devo aprire un altro topic ed ho bisogno del tuo aiuto.
ciao, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Postdi miko » 29/03/19 22:43

Buonasera,
ho eseguito un primo breve test del tuo ultimo codice, che ovviamente funziona, nonostante
Premesso che non ho alcuna esperienza di Javascript all'interno di un pdf....

ci sono solo piccoli dettagli che non riesco a modificare;
il codice che hai realizzato è diventato ancora più complicato per le mie attuali conoscenze.

1) quando si hanno numeri del tipo 0,01 oppure 1 oppure 1,25 dovrebbe risultare
un centesimo, un euro, un euro e venticinque centesimi
e non
uno centesimo, uno euro, uno euro e venticinque centesimi etc.

2) per i numeri composti dalle centinaia, 100,200,300,.. e la decina 80, si dovrebbe avere
centottanta, centottantacinque, duecentottantotto,... etc.
e non
centoottanta, centoottantacinque, duecentoottantotto,...etc.
deve cioè essere presente/troncarsi una delle due o

3) avevo scritto, ma erroneamente,
nel caso che la parte intera sia 0 con 2 decimali, es 0,12
dovrebbe risultare soltanto " dodici Centesimi"
mentre ora si ha " Euro e dodici Centesimi"

alla luce di quanto ho letto, le nuove normative europee prescrivono che per tutti i moduli,
assegni, bollettini, ..., è obbligatorio indicare sempre gli euro ed i centesimi sia in numero che in lettere
quindi il numero 0,12 deve risultare zero euro e dodici centesimi
e non, come è attualmente, dodici centesimi
così il numero 135,00 deve risultare centotrentacinque euro e zero centesimi
e non, come è attualmente, centotrentacinque euro

in tutti i casi, sia che la parte intera del numero sia zero o diversa da zero ed i centesimi siano nulli o diversi da zero
la conversione in lettere deve corrispondere al numero in cifre
0,12 >>> zero euro e dodici centesimi
1,00 >>> un euro e zero centesimi
etc.
mi sono fermato ad un test sulle centinaia, poi ho provato a fare queste modifiche, senza riuscirci;
saluti, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Postdi archimede » 30/03/19 11:51

Nell'altra discussione ho postato il codice che risolve i tre problemi segnalati.

Alessandro
archimede
Moderatore
 
Post: 2834
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi miko » 07/04/19 19:42

Salve,
anche se hai inserito il codice nell’altro topic, l’argomento che tratto qui mi sembra più attinente a questo topic, decidi tu se spostare.
sto studiando il tuo codice per capire la procedura e cosa eseguono le singole linee di codice;
ho compreso la prima funzione ConvertToHundreds(num), ma non riesco a comprendere, nonostante i miei studi-ricerche sulla sintassi del linguaggio, alcune linee della seconda funzione ConvertToWords(num).

Supponiamo di convertire il numero 1.234,56
eseguiamo la funzione ConvertToHundreds(num), il cui risultato si trova in return cWords;
ed ora procediamo con la funzione ConvertToWords(num);

function ConvertToWords(num)
……………..
……………
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Cosa contiene la variabile nLeft nella seguente linea? Cosa esegue questa linea?
Immagino che num è il numero che inseriamo nel textbox, 1.234,56 ma non capisco la funzione Math.floor
che secondo quando leggo ‘ restituisce il più grande intero minore od uguale ad un numero ‘ ?
quindi dovrebbe contenere il numero 1.234 ?
var nLeft = Math.floor(num)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
il ciclo successivo si svolge in questo modo ?
aumenta la variabile i fino a quando nLeft è maggiore di zero, quando nLeft diventa uguale o minore di zero esci dal ciclo?
Se, come credo, nLeft = 1.234 allora si ripete il ciclo 1.234 volte ?
for (var i = 0; nLeft > 0; i++)
{
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
qui si prende il modulo o resto di nLeft ?
if (nLeft % 1000 > 0)
{
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Qui si controlla se i è diverso da zero
if (i != 0)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
Qui si richiama la prima funzione ConvertToHundreds, si converte il contenuto di nLeft e si controlla se è uguale ad uno ?
if (ConvertToHundreds(nLeft) === 'uno')

se ConvertToHundreds(nLeft) è uguale ad uno allora
cWords = aUnit[i - 1] + cWords
ma qui il secondo cWords è quello che deriva da ‘ return cWords ’ alla fine della prima funzione ?
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
……………………………
…………………………………..
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Qui si esegue il Math.floor di nLeft diviso 1000 ?
nLeft = Math.floor(nLeft / 1000)
………………………………………….
……………………………………………….
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Qui si controlla se cWords è uguale ad uno, e dovrebbe essere il caso dei numeri del tipo 1,00 – 1,25 - 0,01
Ma mi confondo con la precedente linea if (ConvertToHundreds(nLeft) === 'uno')
if (cWords === 'uno') cWords = 'un'
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
qui si prende il primo carattere di cWords, si trasforma in maiuscolo, con slice copiamo tutto il resto di cWords a partire dalla posizione 1 fino alla fine, e si aggiunge
cWords = cWords.charAt(0).toUpperCase() + cWords.slice(1)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
cosa significa cWords.trim() ?
if (cWords.trim()) cWords += ' Euro e '
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
……………………………………….

qui si esegue un arrotondamento del numero inserito nel textbox moltiplicato per 100 e poi diviso 100 ?
immagino che da questo punto inizia la conversione dei centesimi?
num = Math.round(num * 100) % 100
if (num > 0)
{
if (num === 1) cWords += 'un Centesimo'
qui ancora il richiamo alla prima funzione, ConvertToHundreds(num), per convertire i centesimi 56 dell’esempio ?
else cWords += ConvertToHundreds(num) + " Centesimi"
……………………………………
…………………………………….
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
cosa significa
var regex = /(nt[a|i])([u|o])/gi
con tutti quei caratteri ?

qui immagino che si cerca in cWords uno dei caratteri di regex, e se viene trovato allo si sostituisce con nt$2, ma cosa è questo nt$2 ?
if (cWords.match(regex)) cWords = cWords.replace(regex, 'nt$2')
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
…………………………………….
…………………………………………….
ed infine questa ultima linea ?
cosa svolge e cosa significa (!cWords.trim()) ?
if (!cWords.trim()) cWords = "Zero Euro e zero Centesimi"

………………………………
Come puoi notare, basandomi su intuizione, interpretazione, studio c’è molta teoria ma poco risultato.
Quando hai tempo, anche una linea per volta, se puoi spiegarmi le linee di codice magari aggiungendo, in qualche linea, un esempio concreto dell’azione svolta dalla riga di codice.
Saluti, grazie
windows 10 - office 2013
miko
Utente Senior
 
Post: 447
Iscritto il: 29/12/09 10:44

Postdi archimede » 10/04/19 12:33

Questa non è la sede adatta per un corso accelerato di Javascript.

Il mio consiglio è di imparare a usare il debugger del browser (raccomando Chrome) con il quale potrai seguire l'esecuzione del codice riga per riga, analizzare il valore delle variabili in qualsiasi momento e molto altro ancora.

Puoi iniziare qui.

Fatto questo, se hai ancora dubbi su alcune specifiche istruzioni chiedi pure.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2834
Iscritto il: 07/11/02 12:41
Località: Genova


Torna a Programmazione


Topic correlati a "Convertire numeri in lettere":


Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti