Старый поток, но в любом случае ... Следует помнить, что использование std::locale
делает строку "красивой", с правильной десятичной точкой, разделителями тысяч и чем угодно, в зависимости от платформы и локали. Скорее всего, использование imbue()
прервет любой разбор строки после ее форматирования. Например:
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();
Дает следующий вывод:
without locale: 1234.56
with fr locale: 1 234,56
Использование strtod()
или аналогичного значения во второй строке, вероятно, будет работать не очень хорошо ... Кроме того, пробел между «1» и «2» во второй выходной строке является неразрывным, что делает строку еще красивее: -)