hilo viejo, pero de todos modos ... Uno debe ser consciente de que el uso de un std::locale
hace que la cadena "bastante", completo con el punto decimal correcto, separadores de miles y lo que no, según la plataforma y la configuración regional. Lo más probable es que al usar imbue()
se rompa cualquier análisis sintáctico de la cadena después de formatearla.Por ejemplo:
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();
da el siguiente resultado:
without locale: 1234.56
with fr locale: 1 234,56
Usando strtod()
o similares en la segunda cuerda probablemente no va a funcionar muy bien ... Además, el espacio entre "1 "y" 2 "en la segunda cadena de salida no está rompiendo, haciendo que la cadena sea aún más bonita :-)
usando su ejemplo resultados en: std :: error de ejecución locale :: facet :: _ S_create_c_locale nombre no válido – NomeN
Este error probablemente significa que, en su plataforma, el nombre "fr" no se vincula a una configuración regional. –
Lo supuse todo, pero ¿cómo podría averiguar qué nombres * están * vinculados a una configuración regional? – NomeN