我正在使用boost::lexical_cast<std::string>(double)
将双精度转换为字符串,生成JSON序列化字节流,即(在远程端)由.NET解析。
我能够强制.NET使用InvariantCulture
进行解析,从而为每种可能的语言返回可预测的结果。
但是,我无法在boost::lexical_cast文档中找到此保证。我尝试了一下,它对于不同的语言环境设置的工作方式相同。但是,我不能确定只有少数测试,我在文档中遗漏了什么,或者这根本不能保证,我必须使用别的东西?
编辑: 我发现了一个问题。
std::locale::global(std::locale("Czech"));
std::cout << boost::lexical_cast<std::string>(0.15784465) << std::endl;
返回0,15784465
,这是不受欢迎的。我可以强制boost::lexical_cast<>
不要注意区域设置吗?
答案 0 :(得分:5)
我可以强制使用boost :: lexical_cast&lt;&gt;不要注意语言环境?
不,我不认为这是可能的。你能做的最好的就是打电话
std::locale::global(std::locale::classic());
将全局语言环境设置为“C”语言环境,因为boost::lexical_cast
依赖于全局语言环境。但是,问题是如果代码中的其他位置在调用boost::lexical_cast
之前将全局语言环境设置为其他内容,那么您仍然会遇到相同的问题。
因此,一个强大的解决方案是imbue
这样的字符串流,你总能确定这是有效的:
std::ostringstream oss;
oss.imbue(std::locale::classic());
oss.precision(std::numeric_limits<double>::digits10);
oss << 0.15784465;