#include #include #include /** Custom policy for floating point number generators */ template struct real_policy : boost::spirit::karma::real_policies { static int floatfield(T) { return boost::spirit::karma::real_policies::fmtflags::fixed; } static unsigned int precision(T) { return std::numeric_limits::digits10 + 1; } }; void write_double(std::back_insert_iterator &sink, double &value) { boost::spirit::karma::real_generator > generator; boost::spirit::karma::generate(sink, generator, value); } int main() { std::string s; s.reserve(100); std::back_insert_iterator sink(s); double value = 0.09999999999999987; write_double(sink, value); std::cout << s << " != " << value << std::endl; return 0; }