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 << ...
.)
what is the best way to avoid negative zero in output? адреса поверхностные проблемы. Его ответ, округляя до нужного числа значащих цифр до, переходя к < <, является большим количеством вычислений по сравнению с «просто отбросьте фриккин» минус, если все цифры равны нулю ».
Это может быть немного лучше с помощью ['setw'] (http://en.cppreference.com/w/cpp/io/manip/setw) (выравнивание по правому краю вывода) или [' showpos'] (http://en.cppreference.com/w/cpp/io/manip/showpos) (показать либо '+', либо '-'). – dyp
Да, 'showpos' мерцает + и - вместо пробела и минуса. Около одного пикселя меньше мерцания :-). –
Есть ли что-то особенно неправильное с 'return (s.str() ==" -0.000 ")? string ("0.000"): s.str(); '? Или это означает признание поражения? В случае 'cout' вам нужно выполнить' cout << fixmydouble (value); '. –