Funzione numeri in lettere

di alessandro.vitale il
7 risposte

Buonasera,

ho bisogno della funzione per convertire i numeri in lettere. ad esempio 

1.450,25 (quindi con punto separatore delle migliaia e la , come separatore dei decimali)  in millequattrocentocinquanta/25

ne ho una che funziona ma in VBA ma non saprei proprio come convertirla in php.

Ce ne sono in girò già pronte che farebbero al caso mio? In altre discussioni “vecchie” si fa riferimanto a dei link  non più attivi.

Grazie 

7 Risposte

  • Ma tu hai fatto una ricerca ad esempio con

    Numeri in lettere php

    ??

  • Certo e quello che ho trovato non é esattamete quello che cerco. Ritieni che ci sia quello che cerco e io non l'ho trovato? 

  • Certo e quello che ho trovato non é esattamete quello che cerco. Ritieni che ci sia quello che cerco e io non l'ho trovato? 

    Praticamente come Toto' al “ghisa” (il vigile urbano di Milano):

    per andare dove devo andare, per dove devo andare?

    ;-)

    https://www.youtube.com/watch?v=VQ0tvs9Egj0

  • 31/07/2023 - migliorabile ha scritto:


    Certo e quello che ho trovato non é esattamete quello che cerco. Ritieni che ci sia quello che cerco e io non l'ho trovato? 

    Praticamente come Toto' al “ghisa” (il vigile urbano di Milano):

    per andare dove devo andare, per dove devo andare?

    ;-)

    Eh beh…. É tutto un pomeriggio che cerco

    … 

  • Cioè cosa hai trovato? Cosa hai provato? Cosa non va in quello che hai trovato e provato? 

  • Ciao si hai ragione, ho provato questa: però non gestisce i decimali. Nel senso che 852,00 lo legge correttamente ottocento cinquantadue (devo poi fargli togliere lo spazio) ma se il valore è 852,25 me lo legge sempre ottocento cinquantadue. quando io vorrei che nel primo caso mi leggesse ottocenticinquantadue/00 e nel secondo caso ottocentocinquantadue/25 

    function numero_lettere($numero)
    {
        if (($numero < 0) || ($numero > 999999999))
        {
            return "$numero";
        }
    
        $milioni = floor($numero / 1000000);  // Milioni  
        $numero -= $milioni * 1000000;
        $migliaia = floor($numero / 1000);    // Migliaia 
        $numero -= $migliaia * 1000;
        $centinaia = floor($numero / 100);     // Centinaia 
        $numero -= $centinaia * 100;
        $decine = floor($numero / 10);       // Decine 
        $unita = $numero % 10;               // Unità 
    
        $cifra_lettere = "";
    
        if ($milioni)
        {
        $tmp = numero_lettere($milioni);
        $cifra_lettere .= ($tmp=='uno') ? '' : $tmp;
        $cifra_lettere .= ($milioni == '1') ? "un milione ":" milioni ";
        }
    
        if ($migliaia)
        {
        $tmp = numero_lettere($migliaia);
        $cifra_lettere .= ($tmp=='uno') ? '' : $tmp;
        $cifra_lettere .= ($migliaia == '1') ? "mille":"mila ";
        }
    
        if ($centinaia)
        {
        $tmp = numero_lettere($centinaia);
        $cifra_lettere .= ($tmp=='uno') ? '' : $tmp;
        $cifra_lettere .= "cento";
        }
        
        $array_primi = array("", "uno", "due", "tre", "quattro", "cinque", "sei",
            "sette", "otto", "nove", "dieci", "undici", "dodici", "tredici",
            "quattordici", "quindici", "sedici", "diciassette", "diciotto",
            "diciannove");
        $array_decine = array("", "", " venti", " trenta", " quaranta", " cinquanta", " sessanta",
            " settanta", " ottanta", " novanta");
        $array_decine_tronc = array("", "", " vent", " trent", " quarant", " cinquant", " sessant",
            " settant", " ottant", " novant");
    
        
        if ($decine || $unita)
        {
            
            if ($decine < 2)
            {
                $cifra_lettere .= $array_primi[$decine * 10 + $unita];
            }
            else
            {
                if ($unita == 1 || $unita == 8)
                $cifra_lettere .= $array_decine_tronc[$decine];
                else
                $cifra_lettere .= $array_decine[$decine];
    
                if ($unita)
                {
                        $cifra_lettere .= $array_primi[$unita];
                }
            }
        }
    
    
        if (empty($cifra_lettere))
        {
            $cifra_lettere = "zero";
        }
    
        return $cifra_lettere;
    }
    
  • CI SONO RIUSCITO. Per chi la volesse :

    function numero_lettere($numero)
    {
        $parte_intera = floor($numero);  // Parte intera
        $parte_decimale = $numero - $parte_intera;  // Parte decimale
    
        if (($numero < 0) || ($numero > 999999999))
        {
            return "$numero";
        }
    
        $milioni = floor($numero / 1000000);  // Milioni  
        $numero -= $milioni * 1000000;
        $migliaia = floor($numero / 1000);    // Migliaia 
        $numero -= $migliaia * 1000;
        $centinaia = floor($numero / 100);     // Centinaia 
        $numero -= $centinaia * 100;
        $decine = floor($numero / 10);       // Decine 
        $unita = $numero % 10;               // Unità 
    
        $cifra_lettere = "";
    
        if ($milioni)
        {
            $tmp = numero_lettere($milioni);
            $cifra_lettere .= ($tmp == 'uno') ? '' : $tmp;
            $cifra_lettere .= ($milioni == '1') ? "un milione" : "milioni";
        }
    
        if ($migliaia)
        {
            $tmp = numero_lettere($migliaia);
            $cifra_lettere .= ($tmp == 'uno') ? '' : $tmp;
            $cifra_lettere .= ($migliaia == '1') ? "mille" : "mila";
        }
    
        if ($centinaia)
        {
            $tmp = numero_lettere($centinaia);
            $cifra_lettere .= ($tmp == 'uno') ? '' : $tmp;
            $cifra_lettere .= "cento";
        }
    
        $array_primi = array("", "uno", "due", "tre", "quattro", "cinque", "sei",
            "sette", "otto", "nove", "dieci", "undici", "dodici", "tredici",
            "quattordici", "quindici", "sedici", "diciassette", "diciotto",
            "diciannove");
        $array_decine = array("", "", "venti", "trenta", "quaranta", "cinquanta", "sessanta",
            "settanta", "ottanta", "novanta");
        $array_decine_tronc = array("", "", "vent", "trent", "quarant", "cinquant", "sessant",
            "settant", "ottant", "novant");
    
        if ($decine || $unita)
        {
    
            if ($decine < 2)
            {
                $cifra_lettere .= $array_primi[$decine * 10 + $unita];
            }
            else
            {
                if ($unita == 1 || $unita == 8)
                    $cifra_lettere .= $array_decine_tronc[$decine];
                else
                    $cifra_lettere .= $array_decine[$decine];
    
                if ($unita)
                {
                    $cifra_lettere .= $array_primi[$unita];
                }
            }
        }
    
        // Gestione delle cifre decimali
        if ($parte_decimale > 0)
        {
            $cifra_lettere .= "/";
            $parte_decimale = round($parte_decimale, 2);  // Arrotonda a due cifre decimali
            $decimale_in_lettere = "";
            $parte_decimale *= 100;  // Convertiamo la parte decimale in un numero intero
    
            // Convertiamo le due cifre decimali in lettere
            $decine_decimale = floor($parte_decimale / 10);
            $unita_decimale = $parte_decimale % 10;
    
            if ($decine_decimale < 2)
            {
                $decimale_in_lettere .= $array_primi[$decine_decimale * 10 + $unita_decimale];
            }
            else
            {
                if ($unita_decimale == 1 || $unita_decimale == 8)
                {
                    $decimale_in_lettere .= $array_decine_tronc[$decine_decimale];
                }
                else
                {
                    $decimale_in_lettere .= $array_decine[$decine_decimale];
                }
    
                if ($unita_decimale)
                {
                    $decimale_in_lettere .= $array_primi[$unita_decimale];
                }
            }
    
            $cifra_lettere .= $parte_decimale;
        }
    
        if (empty($cifra_lettere))
        {
            $cifra_lettere = "zero";
        }
    
        return $cifra_lettere;
    }
Devi accedere o registrarti per scrivere nel forum
7 risposte