2010-11-12 61 views
10

voglio creare una stringa in C++ con il seguente formato:separatore delle migliaia in C++

string + numbersWithFormatAndThousandSeparator + string 

io non sono sicuro se std::string o snprintf() fornisce formato simile a quello in particolare il separatore delle migliaia. Qualcuno potrebbe aiutarmi con questo?

risposta

0

informazioni (compreso il separatore per le migliaia) per la formattazione di valori numerici è disponibile nell'intestazione <clocale>. Questa intestazione fornisce una struttura lconv che contiene le informazioni necessarie. In particolare, la struttura presenta un membro char *thousands_sep che potrebbe essere proprio quello di cui hai bisogno.

Vedere la documentazione struct lconv per tutti i dettagli.

2

BOOST migliora il supporto locale C++ (oltre a dare chiari esempi di utilizzo per visualizzare i numeri con virgola migliaia separatori): vedi http://cppcms.sourceforge.net/boost_locale/html/tutorial.html

+1

Non vedo su quella pagina gli esempi chiari suggeriti da questa risposta. Che ne dici di un link più diretto o, meglio ancora, di uno degli esempi qui? –

1

Ci sono molti modi per formattare correttamente un numero in C++. Leggi questo articolo per alcuni di loro (boost::lexical_cast è il mio preferito): http://www.cplusplus.com/articles/numb_to_text/

+2

A meno che non manchi come, lexical_cast non fa migliaia di separatori? –

+0

AFAIK lexical_cast utilizza le impostazioni internazionali globali correnti. Quindi se migliaia di separatori sono presenti nelle impostazioni locali, verranno analizzati/formattati correttamente. –

4

modo semplice e veloce:

std::ostringstream ss; 
ss.imbue(std::locale("en_US.UTF-8")); 
ss << 1033224.23; 
return ss.str(); 

restituirebbe una stringa "1,033,244.23"

ma richiede en_US.UTF-8 locale a essere configurato sul tuo sistema.

+4

THAT ha funzionato per me su una macchina, ma non è riuscito su un altro ("locale non trovato" o qualcosa del genere. Quindi ho provato semplicemente 'ss.imbue (std :: locale (" "));'. Questo ha funzionato. "seleziona le impostazioni internazionali predefinite per il tuo sistema, e speriamo che sia ciò che vuoi tu e i tuoi utenti. Notare che' locale() 'non è riuscito (nessun separatore di migliaia). –

Problemi correlati