boost::lexical_cast とブースト スピリットの解析を比較すると、奇妙なことに気付きました。文字列をフロートに解析しようとしています。何らかの理由で、精神は非常に不正確な結果をもたらします。例: 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;
}