Funzione numeri in lettere

di il
7 risposte

Funzione numeri in lettere

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

  • Re: Funzione numeri in lettere

    Ma tu hai fatto una ricerca ad esempio con

    Numeri in lettere php

    ??

  • Re: Funzione numeri in lettere

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

  • Re: Funzione numeri in lettere

    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

  • Re: Funzione numeri in lettere

    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

    … 

  • Re: Funzione numeri in lettere

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

  • Re: Funzione numeri in lettere

    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;
    }
    
  • Re: Funzione numeri in 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