thread vecchio, ma comunque ... Uno dovrebbe essere consapevole che l'utilizzo di un std::locale
rende la stringa "abbastanza", completa con il punto decimale corretto, separatori di migliaia e cosa no, a seconda della piattaforma e del locale. Molto probabilmente, usando imbue()
si interromperà qualsiasi analisi della stringa dopo che è stata formattata.Per esempio:
std::ostringstream s;
std::locale l("fr-fr");
s << "without locale: " << 1234.56L << std::endl;
s.imbue(l);
s << "with fr locale: " << 1234.56L << std::endl;
std::cout << s.str();
ha pronunciato la seguente uscita:
without locale: 1234.56
with fr locale: 1 234,56
Utilizzando strtod()
o simili sulla seconda corda probabilmente non funzionerà molto bene ... Inoltre, lo spazio tra "1 "e" 2 "nella seconda stringa di output è uno stringente, rendendo la stringa ancora più carina :-)
utilizzo dell'esempio restituisce: std :: errore di runtime locale :: facet :: _ S_create_c_locale nome non valido – NomeN
Questo errore probabilmente significa che, sulla piattaforma, il nome "fr" non si associa a una locale. –
Immaginai tanto, ma come hai potuto scoprire quali nomi * sono * legato a un locale. – NomeN