将double转换为带有n个小数位的字符串,不带尾随零

时间:2013-09-20 09:41:58

标签: c++ c

1)double d = 1.234567899;
将此数字转换为包含8个小数位的字符串,不会截断。 因此,预期输出为“1.23456789”,截断最后9位。

2)if d = 1.2345699;
因此,解决方案不应附加0到小数点后8位。预期输出“1.2345699”。

我尝试了很多解决方案,最后得到了stringstream c ++类。第二个问题已经解决,但第一个问题仍然存在。

有没有办法实现输出?

提前致谢。

3 个答案:

答案 0 :(得分:2)

如果要截断部分字符串表示而不进行舍入,则需要手动执行:

#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;
}

答案 1 :(得分:0)

您是否可以通过首次将双倍的地板服务到所需的小数? 如果是这样,请查看http://www.cplusplus.com/forum/beginner/3600/

答案 2 :(得分:0)

完全按照您的意愿截断:

sprintf(str, "%1.10f", d);
memset(str+10, 0x00, 1);