我看到所有示例都说要使用fixed
,precision
等,但所有这些都是人们想要打印价值的时候。
我要做的是将我的双倍值从数字转换为字符串,我不需要科学记数法。
我的数字示例:6.61914e+6
那么当我的大部分时间都不长时,如何以简单的方式完成呢。
答案 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::fixed
和std::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
正确评论,这不好,因为你需要知道精度
我能看到的唯一灵活方式是:
#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";
}