Formattazione in valuta

di il
9 risposte

Formattazione in valuta

Buonasera, sapreste dirmi se esiste una classe in visual c++ o un metodo che prende una stringa di tipo CString e la formatti in valuta… es CString str; str = _T("12345,67") e str diventi = 12.345,67 oppure str = 5000 e diventi str = 5.000,00 

Ho anche provato a creare un metodo, ma senza successo…

Grazie a chi saprà aiutarmi… so che sarebbe molto semplice aggiungere i punti dove serve, ma quando faccio la conversione in double me lo tronca dal primo punto in poi…

9 Risposte

  • Re: Formattazione in valuta

    Se per “cstring” intendi stringa C, ovvero un char[], le funzioni sono queste (nell'header “cstdlib” ) 

    https://en.cppreference.com/w/cpp/string/byte/strtof

    Per il tipo std::string, sono queste (header “string”) 

    https://en.cppreference.com/w/cpp/string/basic_string/stof

    In generale è sconsigliabile usare il tipo float per le valute perché il formato base-esponente non può rappresentare tutti i valori. 

  • Re: Formattazione in valuta

    No no intendo proprio la classe CString in un progetto MFC di Visual C++ da usare in una Textbox che si controlla con la classe CEdit

  • Re: Formattazione in valuta

    Usa il metodo Format della CString

  • Re: Formattazione in valuta

    Il metodo Format consente di formattare una stringa con i decimali, ma non con i punti separatori delle migliaia… o almeno, non ho trovato esempi a riguardo… riesci a postarmene qualcuno? Io ho usato str.Format("%.2lf", cur ) con cur di tipo float, ma non mettere i separatori delle migliaia…

  • Re: Formattazione in valuta

    La cosa e' “”piu' complicata"".

    1) gli importi monetari NON SI RAPPRESENTANO con i floating point MA con i fixed point (numero di decimali PREDEFINITO 2,4 o 6, dipende dalla moneta)

    2) la rappresentazione in forma di valuta DIPENDE dalla moneta E dalla nazione e NON CENTRA NIENTE con la rappresentazione dei floating point usati per il CALCOLO SCIENTIFICO (e la relativa rappresetazione HA LO STESSO SCOPO)

    Soluzione: implementati una classettina ad hoc.

  • Re: Formattazione in valuta

    Ah ok quindi a differenza di c# o visual basic non esiste un metodo Format che lo faccia automaticamente  …

  • Re: Formattazione in valuta

    No, ti stanno dicendo un'altra cosa. Ti stanno dicendo che il tipo “float” non è quello giusto per trattare le valute perché soggetto a problemi di errori di rappresentazione abbastanza rognosi da trattare.

    Dovresti usare un tipo CURRENCY oppure la classe COleCurrency che incapsula il tipo Currency più adatto allo scopo.

    Limitatamente al problema che hai posto invece, un codice che può risolvere è questo (esempio)

    #include <sstream>  
    using namespace std;
    void Test()
    {
       CString s;
       float v = 1234.56;
       ostringstream tmp;
       tmp.imbue(locale(""));
       tmp << v;
       s = tmp.str().c_str();
       MessageBox(NULL,  s, "Test", 0);
    }
  • Re: Formattazione in valuta

    Grazie!! Però il codice che mi hai fornito non mette i separatori delle migliaia… ho risolto creando una classe ad hoc con tanto di metodi toString() e toFloat() che funziona anche mentre digito un numero in una textbox formattando il valore all'istante e controllando la posizione del cursore 

  • Re: Formattazione in valuta

    Veramente nel mio PC funziona

    Prova indicando esplicitamente

    tmp.imbue(locale("IT-IT"));

Devi accedere o registrarti per scrivere nel forum
9 risposte