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

Nit*_*esh 2 c++ string double iostream

要将双精度转换为不带科学记数法的字符串,建议的方法是

std::ostringstream strStream;
strStream << std::fixed;
strStream << value;
std::string str = strStream.str();
Run Code Online (Sandbox Code Playgroud)

如在 将 << 与 double 一起使用时防止 ostream 中的科学记数法&如何将 double 转换为 C++ 中的字符串?

我想将双精度转换为字符串,没有任何分隔符和点/句点作为小数点,即忽略区域设置。

从ostringstreamstd::fixedshowpoint的描述中,我无法确定

  1. 小数点是否位于当前语言环境?和
  2. str() 返回的字符串中是否会根据语言环境存在其他分隔符(例如千位分组)?

如果按照当前区域设置,那么如何覆盖,以便它始终以点/句号作为小数点并且没有分组?

APr*_*mer 6

是的,流的默认区域设置是构建时的当前全局区域设置(请参阅basic_ios::init您最喜欢的参考中的描述,然后检查流的类型是否不会这样做 - 没有一个标准类会这样做)。

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

strStream.imbue(std::locale::classic());
Run Code Online (Sandbox Code Playgroud)

定义之后strStream