c++ - 将 double 转换为带 n 个小数位且不带尾随零的字符串

标签 c++ c

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/

相关文章:

c++ - push_back 非指针元素到一行中的 vector

c - 通过渲染四边形更新粒子系统的速度和位置

c - 在函数中传递结构成员

c - Unix XML 文件转换为平面文件

c++ - c++ 中字符串的动态构造 - 什么是更 c++-ish 的方法来做到这一点?

c++ - SDL_GL_GetAttribute() 输出零?

c++ - (n&1) 和 n&1 之间的区别

c++ - Qt iOS 如何从可执行文件中排除资源以满足应用商店限制

c++ - 如何用qdbusxml2cpp生成同步接口(interface)类?

C 代码 - 没有足够的可用内存将数据从 txt 文件读取到用于 Debug模式的一维动态数组