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.
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)
Vedi anche Milione

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;
};
Tags:
Calcolatori37 HTML 554 JavaScript184 Utility59
Potrebbe interessarti anche: