double value;
std::ostringstream s;
s << std::fixed << std::setprecision(3) << value;
когда value
бродит в диапазоне -1.0e-14
в 1.0e-14
, s
мерцает между "0.000"
а также "-0.000"
,
Существует ли чистый способ подавления знака минус, который указывает только на нерелевантный шум на десять десятичных знаков ниже?
(Менее общий случай cout << ...
.)
Каков наилучший способ избежать отрицательного нуля на выходе? решает поверхностные проблемы Его ответ, округляя до нужного числа значащих цифр до переходя к <<, это много вычислений по сравнению с «просто отбросить чертов минус, если все цифры равны нулю».
Даже если ничего в <iomanip>
можно настроить фактический поток, мы можем, по крайней мере, не зависеть от значения, переданного setprecision()
, как это:
const std::string& t = s.str();
return t.find_first_of("123456789") == t.npos && t[0] == '-' ?
t.substr(1) : t;
Если цифры из 1..9 не найдены, то все цифры должны быть 0.
Кроме того, если он начинается с минуса, пропустите этот символ.
Других решений пока нет …