size_t i = a.find(delim);
if (i == a.length() - 1) {
piece = a.substr(0, i);
- } else if (i != String::npos) {
- piece = a.substr(0, i);
- tmp = a.substr(i + 1);
} else if (i == 0) {
piece.erase();
tmp = a.substr(i + 1);
+ } else if (i != String::npos) {
+ piece = a.substr(0, i);
+ tmp = a.substr(i + 1);
} else {
piece = a;
}
return tmp;
}
+
+// FIXME: why is this specialization needed?
template<typename Char> inline
docstring const doSplit(docstring const & a, docstring & piece, Char delim)
{
size_t i = a.find(delim);
if (i == a.length() - 1) {
piece = a.substr(0, i);
- } else if (i != docstring::npos) {
- piece = a.substr(0, i);
- tmp = a.substr(i + 1);
} else if (i == 0) {
piece.erase();
tmp = a.substr(i + 1);
+ } else if (i != docstring::npos) {
+ piece = a.substr(0, i);
+ tmp = a.substr(i + 1);
} else {
piece = a;
}
os << std::fixed;
// Prevent outputs of 23.4200000000000017 but output small numbers
// with at least 6 significant digits.
- bool const neg = x < 0;
- // Treat all doubles as positive for the formatting
- if (neg)
- x = -x;
- double const logarithm = log10(x);
+ double const logarithm = log10(fabs(x));
os << std::setprecision(max(6 - static_cast<int>(round(logarithm)), 0)) << x;
string result = os.str();
if (result.find('.') != string::npos) {
if (result[result.length()-1] == '.')
result = rtrim(result, ".");
}
- // Re-add negativity
- if (neg)
- result = "-" + result;
return result;
}