ostringstream插入器是否使用当前区域设置?

时间:2016-01-21 13:53:54

标签: c++ string double iostream

要在没有科学记数法的情况下将double转换为字符串,建议的方法是

std::ostringstream strStream;
strStream << std::fixed;
strStream << value;
std::string str = strStream.str();

如同 Prevent scientific notation in ostream when using << with double&amp; How do I convert a double into a string in C++?

我想将double转换为不带任何分隔符的字符串,并将Dot / Full-stop转换为小数点,即忽略区域设置。

ostringstreamstd::fixedshowpoint的说明中,我无法确定

  1. 小数点是否在当前区域设置中?和
  2. str()根据语言环境返回的字符串中是否会有其他分隔符(例如千个分组)?
  3. 如果它按照当前的语言环境,那么覆盖的方式是什么 - 它总是以小数点作为Dot / Full-stop并且没有分组?

1 个答案:

答案 0 :(得分:3)

是的,流的默认语言环境是构造时的当前全局语言环境(请参阅您最喜欢的引用中的basic_ios::init的说明,然后检查流的类型是否也没有 - 没有标准类确实如此。

要更改区域设置,请使用basic_ios::imbue,因此您可能需要添加

strStream.imbue(std::locale::classic());

定义strStream

之后