我有一个看起来像这样的字符串:
"0.4794255386042030002732879352156"
Run Code Online (Sandbox Code Playgroud)
这大约是罪(0.5).我想格式化字符串看起来更好
"4.794255386042e-1"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?记住我正在处理字符串而不是数字(浮点数,双精度数).另外,我需要进行舍入以保持数字尽可能准确,我不能只是截断.如果我需要转换为不同的数据类型,我宁愿选择long double,因为常规double没有足够的精度.四舍五入之前,我想要至少12位小数.也许我可以做一个简单的sprintf()转换.
像这样的东西:
#include<iostream>
using namespace std;
int main()
{
char *s = "0.4794255386042030002732879352156";
double d;
sscanf(s,"%lf",&d);
printf("%.12e\n",d);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
输出:
# g++ a.cpp && ./a.out
4.794255386042e-01
Run Code Online (Sandbox Code Playgroud)
您是否在寻找像这样?
这是一个示例:
// modify basefield
#include <iostream>
#include <sstream>
using namespace std;
int main () {
std::string numbers("0.4794255386042030002732879352156");
std::stringstream stream;
stream << numbers;
double number_fmt;
stream >> number_fmt;
cout.precision(30);
cout << number_fmt << endl;
cout.precision(5);
cout << scientific << number_fmt << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0.479425538604203005377257795772
4.79426e-01