1)双 d = 1.234567899;
将此数字无截断地转换为小数点后 8 位的字符串。
因此,预期输出为“1.23456789”,截断最后 9。
和
2)如果 d = 1.2345699;
所以解决方案不应将 0 附加到小数点后第 8 位。预期输出“1.2345699”。
我尝试了很多解决方案,最终得到了 stringstream c++ 类。第二个问题已解决,但第一个问题仍然存在。
有什么办法可以实现输出吗?
提前致谢。
最佳答案
如果你想在不舍入的情况下截断部分字符串表示,你需要手动执行:
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <limits>
int main()
{
std::stringstream s;
double d = 1.234567899;
// print it into sstream using maximum precision
s << std::fixed << std::setprecision(std::numeric_limits<double>::digits10) << 1.234567899;
std::string res = s.str();
// Now the res contains something like 1.234567899000000
// so truncate 9000000000 by hand
size_t dotIndex = res.find(".");
std::string final_res = res.substr(0, dotIndex + 9);
std::cout << final_res << std::endl;
return 0;
}
关于c++ - 将 double 转换为带 n 个小数位且不带尾随零的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18913528/