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"
std::stringstream/precision が浮動小数点数をフォーマットするためにどのように機能するのか疑問に思っています。精度引数が16
非小数桁のマイナス数よりも優れている場合、これ"2369.000133698999900"
は「ナイス」ではなくフォームのフォーマットにつながるようです"2369.00013369900"
(関数への引数として渡すなど)で丸めを行うように指示しなくても、それが1に再開する必要があることをどのようstd::stringstream
に知っていますか?しかし、12より大きい引数に対しては丸めを行わないでください8999900
9
8
12
setprecision