double value = 02369.000133699;//acutally stored as 2369.000133698999900
const std::uint32_t left = std::uint32_t(std::abs(value) < 1 ? 1: (1 + std::log10(std::abs(value))));
std::ostringstream out;
out << std::setprecision(std::numeric_limits<T>::digits10 - left) << std::fixed << value;
std::string str = out.str(); //str = "2369.00013369900"
std::ostringstream out2;
out2 << std::setprecision(std::numeric_limits<T>::digits10) << std::fixed << value;
std::string str2 = out2.str(); // str2 = "2369.000133698999900"
Je me demande comment std :: stringstream/precision fonctionne pour le formatage du nombre à virgule flottante. Il semble que si l'argument de précision est supérieure à 16
nombre moins de chiffres non-fractions, cela a conduit à une mise en forme de la forme "2369.000133698999900"
au lieu d'une « belle » "2369.00013369900"
stringstream setprecision et formatage à virgule flottante
comment std::stringstream
savent que 8999900
doit être reprendre une 9
même si je ne "t lui dire de faire l'arrondissement sur la 8
(comme en passant 12
comme argument à la fonction setprecision
)? mais ne le font pas à l'argument supérieur à 12