2012-06-07 83 views
3

我在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? 
} 
+1

@Hans没有用处。错误的语言。 –

回答

14
std::stringstream str; 
str << fixed << setprecision(15) << yournumber; 

您还可能有兴趣在scientific格式标志。

C++ 11还有一些有趣的功能std::to_string,你可能想看看!

+0

#include bushmills

+0

我喜欢C++ 11的提示。但我不喜欢'std :: to_string'不提供灵活性(精度等) – DomTomCat

6

标准方式有什么问题?

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); 
2

你会发现,双重价值并不像你想象的那样精确。它只包含53位精度或约15-17位;之后它开始四舍五入每个结果。如果你想要一个确切的答案,你的号码需要比这更精确,92位数字或364位。

相关问题