>我在 c++ 中存储了一个很大的数字作为精确的双精度值(假设输入"n"是 75):2.4891e+109
有没有办法将其转换为每个数字的字符串或数组?
这是我到目前为止的代码,尽管它与问题并不完全相关:
int main(){
double n = 0;
cout << "Giz a number: ";
cin >> n;
double val = 1;
for(double i = 1; i <= n; i++){
val = val * i;
}
//Convert val to string/array here?
}
std::stringstream str;
str << fixed << setprecision( 15 ) << yournumber;
您可能还对scientific
格式标志感兴趣。
C++11 还有一些有趣的功能std::to_string
您可能想查看一下!
标准方式有什么问题?
std::stringstream ss;
ss << val;
std::string s = ss.str();
此外,C++11 允许:
std::string s = std::to_string(val);
如果您需要性能,您可能会发现上面涉及的内存分配过于昂贵,在这种情况下,您可以求助于 snprintf、已弃用的 strstream,或者直接使用 num_put 方面。例如:
char c[30];
std::snprintf(c,sizeof c,"%e",val);
双精度值并不像你想象的那么精确。它仅包含 53 位精度,或大约 15-17 位;之后,它开始对每个结果进行四舍五入。如果您想要一个确切的答案,您的数字需要比这更高的精度,实际上是 92 位或 364 位。
std::cout << setprecision(5) << val;
如 http://www.cprogramming.com/tutorial/iomanip.html