C ++:转换为字符串时从数字中删除科学记数法

时间:2017-08-22 12:51:45

标签: c++

我看到所有示例都说要使用fixedprecision等,但所有这些都是人们想要打印价值的时候。

我要做的是将我的双倍值从数字转换为字符串,我不需要科学记数法。

我的数字示例:6.61914e+6

那么当我的大部分时间都不长时,如何以简单的方式完成呢。

3 个答案:

答案 0 :(得分:4)

您可以使用std::to_string功能执行任务:

double x = 6.61914e+6;
auto mystr = std::to_string(x);

答案 1 :(得分:4)

引自std::to_string(double)说明:

  

根据需要编写许多数字来表示整体部分,   后跟小数点字符和六位十进制数字。

std::string s = std::to_string(6.61914e+6);

如果小数点后的这个位数不够,可以使用std::ostringstream

std::ostringstream str;
str << std::fixed << std::setprecision(digits) << 6.61914e+6;
std::string s = str.str();

如果您要删除尾随零(根据Robinson的评论并回答此question):

s.erase(s.find_last_not_of('0') + 1, std::string::npos);  

答案 2 :(得分:2)

您可以将std::stringstream与您已经知道的内容一起使用 - std::fixedstd::setprecision

#include <iostream>
#include <sstream>
#include <iomanip>

int main()
{
    std::stringstream ss;
    ss << std::fixed << std::setprecision(0) << 6.61914e+6;
    std::cout << ss.str() << "\n";
}

输出:

6619140

Coliru

正确评论,这不好,因为你需要知道精度

我能看到的唯一灵活方式是:

#include <iostream>
#include <sstream>
#include <iomanip>

int main()
{
    std::stringstream ss;
    ss << std::fixed << 6.61914e+6;
    std::string s = ss.str();
    s.erase(s.find_last_not_of('0') + 1, std::string::npos );
    std::cout << s << "\n";    
}