在比较 boost::lexical_cast 和 boost 精神解析时,我注意到了一些奇怪的事情。我正在尝试将字符串解析为浮点数。由于某种原因,精神给出了非常不精确的结果。例如:当使用 lexical_cast 解析字符串“219721.03839999999”时,我得到 219721.03,这或多或少是可以的。但是当我使用精神(见下面的代码)时,我得到“219721.11”,这远非正常。知道为什么会这样吗?
template<>
inline float LexicalCastWithTag(const std::string& arg)
{
float result = 0;
if(arg.empty())
{
throw BadLexicalCast("Cannot convert from to std::string to float");
}
auto itBeg = arg.begin();
auto itEnd = arg.end();
if(!boost::spirit::qi::parse(itBeg, itEnd, boost::spirit::qi::float_, result) || itBeg != itEnd)
{
throw BadLexicalCast("Cannot convert from to std::string to float");
}
return result;
}