【发布时间】:2012-10-27 21:02:40
【问题描述】:
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"
std::stringstream 如何知道 8999900 必须恢复为一个 9,即使我没有告诉它对 8 进行舍入(例如将 12 作为参数传递给 setprecision function) ?但不要为高于 12 的参数执行此操作
【问题讨论】:
标签: c++ stringstream double-precision