Convertitore di numeri in testo (v. 1.2)
01/11/2003 - Chi non desiderasse l'interpretazione dei decimali, ma vorrebbe che un numero tipo "
13.56" venisse convertito in "
tredici e 56" potrà semplicemente sostituire la riga 59 con questa:
str2=((str1)?" e ":"")+num2;
dalla quale abbiamo tolto tutto lo script a destra del segno + e lasciato il numero "grezzo" in cifre contenuto nella variabile
num2.
Volendo togliere " e " per sostituirla con una barra " / " sarà sufficiente agire sulla stessa riga modificando la stringa immediatamente a destra del primo " ? ".
Ad esempio usando per la riga 59 questa sintassi:
str2=((str1)?"/":"")+num2;
otterremo "
145.94" convertito in "
Centoquarantacinque/54" com'ìè uso fare, ad esempio, per la dichiarazione letterale degli importi di assegni in Euro.
Lo script che mostro rappresenta un convertitore di numeri: da numeri in cifre a numeri in lettere, ad esempio il numero
123456 sarà convertito in
Centoventitremilaquattrocentocinquantasei.
Questo script, abbastanza originale nell'implementazione, nasce da una richiesta fatta nel NewsGroup it.comp.lang.javascript e consente di convertire numeri interi o decimali arrotondati al millesimo. Lo script si trova nel file digitation.js e va copiato integralmente nella vostra pagina HTML, oppure è possibile includerlo come file esterno con la seguente sintassi:
<script language="JavaScript1.1" src="digitation.js"></script>
Lo script è realmente complesso, anche perché ho cercato di ridurlo il più possibile in termini di dimensioni (senza commenti occupa 2.19Kb) e ritengo
sia superfluo un approfondimento delle parti principali che lo compongono, invece è molto più utile elencarne le potenzialità e i limiti per un uso corretto.
Lo script è composto di 2 funzioni:
digit3() e
digitation(num,lower). Solo quest’ultima va considerata e usata.
Come si vede i parametri di questa funzione sono due:
-
num è il numero che deve essere convertito in lettere e può essere indifferentemente di tipo "numeric" o "string"
-
lower impone che la prima lettera del risultato sia minuscola/Maiuscola (se omesso o impostato a 0 o a false, la prima lettera sarà Maiuscola!)
Se il primo parametro (
num) non rappresentasse un numero regolare, la funzione digitation() restituirà null. Attenzione, il separatore decimale è il punto non la virgola!
Per far capire quali valori sono accettati e quali sono le convenzioni adottate, di seguito ci solo alcuni esempi che dovrebbero far chiarezza:
10.00 -> Dieci
0020 -> Venti
1.1 -> Uno e undecimo
1.10 -> Uno e diecicentesimi
0.07 -> Settecentesimi
.002 -> Duemillesimi
3.0024 -> Tre e duemillesimi
1000000000000000 -> Unmilionedimiliardi
1002000000000000 -> Unmilioneduemilamiliardi
280,65 -> null
100a -> null
1000000000000000000 -> null
C'è un'unica limitazione, come avete forse notato: il numero da convertire deve essere minore di unmiliardodimiliardi, cioè la funzione
digitation() restituirà valori corretti finché il primo parametro è <= 999999999999999999 dopodichè restituirà null.
Non esiste una sezione personalizzabile vera e propria; chi volesse, ad esempio, che il valore 180 venga convertito in centottanta" anziché "centoottanta", deve cambiare l'ultimo valore dell'Array
n10b che è uguale a "
cento" con "
cent":
n10b=new Array("","","vent","trent","quarant","cinquant","sessant","settant","ottant","novant","cento");
comunque valori come 101 continueranno ad essere convertiti correttamente: "centouno".
Infine nella pagina di prova è presente anche un'altra funzione utile che permette di digitare solo numeri e punti:
function onlynum(e)
{
if (e.which)
{
if(e.which!=46 && e.which!=8 && (e.which<48 || e.which>57))
return false;
}
else if(e.keyCode)
{
if(e.keyCode!=46 && e.keyCode!=8 && (e.keyCode<48 || e.keyCode>57))
return false;
}
return true;
}
Questa funzione che va usata con l'event-handler
onkeypress della text-box di input: <input type="text" name="cifre" onkeypress="return onlynum(event)"> viene interpretata bene dai browser più recenti e ignorata dagli altri.
Da oggi mai più numeri in cifre!
Per qualsiasi chiarimento sullo script scrivete a Gianni