我在c ++中有一个很大的数字存储为一个精确的double值(假设输入'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?
}
答案 0 :(得分:14)
std::stringstream str;
str << fixed << setprecision( 15 ) << yournumber;
您可能也对scientific
格式标志感兴趣。
C ++ 11还有一些有趣的函数std::to_string
,您可能需要查看它们!
答案 1 :(得分:6)
标准方式有什么问题?
std::stringstream ss;
ss << val;
std::string s = ss.str();
此外,C ++ 11允许:
std::string s = std::to_string(val);
如果您需要性能,您可能会发现上面涉及的内存分配过于昂贵,在这种情况下,您可以使用snprintf,不推荐使用的strstream,或者直接使用num_put facet。例如:
char c[30];
std::snprintf(c,sizeof c,"%e",val);
答案 2 :(得分:2)
你会发现双值并不像你想象的那么精确。它只包含53位精度,或大约15-17位数;之后,它开始舍入每个结果。如果你想要一个确切的答案,实际是92位数或364位,你的数字需要更精确。
答案 3 :(得分:0)
std::cout << setprecision(5) << val;