Convertire i numeri da cifre a lettere (new) IT/EN
Versione migliorata della precedente funzione JavaScript per convertire i numeri da cifre a lettere scritte per esteso (come sugli assegni).
Ad esempio 2234 diventa Due Mila Due Cento Trenta Quattro in italiano e Two Thousand Two Hundred Thirty-Four in inglese.
Il codice della funzione è il seguente:
La funzione per formattare, con separatore delle migliaia (punto), una stringa di numeri è la seguente:
Ad esempio 2234 diventa Due Mila Due Cento Trenta Quattro in italiano e Two Thousand Two Hundred Thirty-Four in inglese.
Un Milione Due Cento Trenta Quattro Mila Venti Quattro
Questa versione supporta più moltiplicatori della precedente, quali:
- Mila (Thousand)
- Milioni (Million)
- Miliardi (Billion)
- Bilioni (Trillion)
- Biliardi (Quadrillion)
- Trilioni (Quintillion)
- Triliardi (Sextillion)
- Quadrilioni (Septillion)
- Quadriliardi (Octillion)
Il codice della funzione è il seguente:
JavaScript: sgart.convNumLett3
var sgart = sgart || {};
/**
* Sgart.it - copyright 2010
* converte i numeri da cifre a lettere sia in italiano che in inglese
* https://www.sgart.it/IT/informatica/convertire-i-numeri-da-cifre-a-lettere/post
* @param {string} strNumber numero in formato stringa
* @param {boolean} abbr flag per abbreviazione ultimme due cifre
* @param {boolean} separator flag per aggiungere o meno il separatore tra le parole
* @returns {ConvertResult} risultato della conversione
*/
sgart.convNumLett3 = function (strNumber, abbr, separator) {
if (isNaN(strNumber) == true) {
return {
success: false,
resultIT: "!!! Inserisci un numero valido !!!",
resultEN: "!!! Please enter a valid number !!!"
};
}
if (strNumber.indexOf('.') >= 0 || strNumber.indexOf(',') >= 0) {
return {
success: false,
resultIT: "!!! Solo numeri interi !!!",
resultEN: "!!! Whole numbers only !!!"
};
}
if (strNumber == '0') {
return {
success: true,
resultIT: "ZERO",
resultEN: "ZERO"
};
}
// https://it.wikipedia.org/wiki/1000_(numero)
// 10^6 10^9 10^12 10^15 10^18 10^21 10^24 10^27
// IT: Milione, Miliardo, Bilione, Biliardo, Trilione, Triliardo, Quadrilione, Quadriliardo
// EN: million, billion, trillion, quadrillion, quintillion, sextillion, septillion, octillion
const lettereIT = {
numeri: [null, "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove", "Dieci", "Undici", "Dodici", "Tredici", "Quattordici", "Quindici", "Sedici", "Diciassette", "Diciotto", "Diciannove"],
decine: [null, null, "Venti", "Trenta", "Quaranta", "Cinquanta", "Sessanta", "Settanta", "Ottanta", "Novanta"],
decine1: [null, null, "Vent", "Trent", "Quarant", "Cinquant", "Sessant", "Settant", "Ottant", "Novant"],
cento: "Cento",
multipli: [null, "Mila", "Milioni", "Miliardi", "Bilioni", "Biliardi", "Trilioni", "Triliardi", "Quadrilioni", "Quadriliardi"],
multipli1: [null, "Mille", "Milione", "Miliardo", "Bilione", "Biliardo", "Trilione", "Triliardo", "Quadrilione", "Quadriliardo"],
un: "Un"
};
const lettereEN = {
numeri: [null, "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"],
decine: [null, null, "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"],
cento: "Hundred",
multipli: [null, "Thousand", "Million", "Billion", "Trillion", "Quadrillion", "Quintillion", "Sextillion", "Septillion", "Octillion"]
};
let numero = strNumber.replace(/^\s+|\s+$/g, "");
if (numero.length > lettereIT.multipli.length * 3) {
return {
success: false,
resultIT: "!!! Numero troppo grande !!!",
resultEN: "!!! Number too large !!!"
};
}
let abbrNum = "";
if (abbr === true) {
if (numero.length > 2) {
abbrNum = numero.substring(numero.length - 2, numero.length);
numero = numero.substring(0, numero.length - 2) + "00";
}
}
//per semplificare il calcolo arrotondo la lunghezza a un mutiplo di 3
const padding3 = numero.length % 3;
if (padding3 === 1)
numero = "00" + numero;
else if (padding3 === 2)
numero = "0" + numero;
const len = numero.length;
// trovo quanti gruppi di 3 cifre ci sono
let mult3 = numero.length / 3 - 1;
const sepIT = separator === true ? " " : "";
const sepEN = " ";
let resultIT = "";
let resultEN = "";
let i = 0;
while (i < len) {
let v = parseInt(numero.substring(i, i + 3));
let rIT = "";
let rEN = "";
//cifra delle centinaia
const n100 = parseInt(numero.charAt(i))
if (n100 > 0) {
if (n100 === 1) {
rIT += sepIT + lettereIT.cento;
rEN += sepEN + lettereEN.numeri[1] + sepEN + lettereEN.cento;
} else {
rIT += sepIT + lettereIT.numeri[n100] + sepIT + lettereIT.cento;
rEN += sepEN + lettereEN.numeri[n100] + sepEN + lettereEN.cento;
}
}
//decine e unità
const n10 = parseInt(numero.substr(i + 1, 2));
if (n10 > 0) {
if (n10 < 20) {
// numeri da 1 a 19
rIT += sepIT + lettereIT.numeri[n10];
rEN += sepEN + lettereEN.numeri[n10];
} else {
//nueri da 20 a 99
const n20 = parseInt(numero.charAt(i + 1));
const n2 = parseInt(numero.charAt(i + 2));
rIT += sepIT + (n2 === 1 ? lettereIT.decine1[n20] : lettereIT.decine[n20]);
rEN += sepEN + lettereEN.decine[n20];
if (n2 > 0) {
rIT += sepIT + lettereIT.numeri[n2];
rEN += "-" + lettereEN.numeri[n2];
}
}
}
if (v > 0 && mult3 > 0) {
if (v === 1) {
resultIT += (mult3 === 1 ? "" : lettereIT.un + sepIT) + lettereIT.multipli1[mult3];
resultEN += lettereEN.numeri[1] + sepEN + lettereEN.multipli[mult3];
} else {
resultIT += rIT + sepIT + lettereIT.multipli[mult3];
resultEN += rEN + sepEN + lettereEN.multipli[mult3];
}
} else {
resultIT += rIT;
resultEN += rEN;
}
i += 3;
mult3--;
}
return {
success: true,
resultIT: resultIT + (abbrNum.length > 0 ? " / " + abbrNum : ""),
resultEN: resultEN + (abbrNum.length > 0 ? " / " + abbrNum : "")
};
};
La funzione per formattare, con separatore delle migliaia (punto), una stringa di numeri è la seguente:
JavaScript: sgart.formatMoney
/**
* Sgart.it - copyright 2010
* Formatta una stringa numerica aggiungendo i separatori delle migliaia
* @param {string} strNumber numero da formattare
* @returns {string} numero formattato con separatore delle migliaia
*/
sgart.convNumLettFormatNumber = function (strNumber, sep) {
if (strNumber == null || strNumber.length === 0) return "-";
if (/^\d+$/.test(strNumber) === false) return "!";
if (sep === undefined) sep = ".";
let m = strNumber.length % 3;
if (m === 0) m = 3;
let strResult = "";
let i = 0;
while (i < strNumber.length) {
if (m === 0) {
strResult += sep;
m = 3;
}
strResult += strNumber[i];
i++;
m--;
}
return strResult;
};