Fix float data conversion to string
Fixes precision digits, closing #430 Also avoids forcing a trailing '.0', closing #1627
This commit is contained in:
parent
3d7575c282
commit
19522ac509
1 changed files with 6 additions and 2 deletions
|
@ -68,7 +68,11 @@ struct double_policy : boost::spirit::karma::real_policies<T>
|
|||
{
|
||||
typedef boost::spirit::karma::real_policies<T> base_type;
|
||||
static int floatfield(T n) { return base_type::fmtflags::fixed; }
|
||||
static unsigned precision(T n) { return 16 ;}
|
||||
static unsigned precision(T n) { return 15 - trunc(log10(n)); }
|
||||
template <typename OutputIterator>
|
||||
static bool dot(OutputIterator& sink, T n, unsigned precision) {
|
||||
return n ? *sink = '.', true : false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -77,7 +81,7 @@ template <>
|
|||
inline bool to_string(std::string & str, double value)
|
||||
{
|
||||
namespace karma = boost::spirit::karma;
|
||||
typedef boost::spirit::karma::real_generator<double, double_policy<double> > double_type;
|
||||
typedef karma::real_generator<double, double_policy<double> > double_type;
|
||||
std::back_insert_iterator<std::string> sink(str);
|
||||
return karma::generate(sink, double_type(), value);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue