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?
}
4

4 回答 4

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

您可能还对scientific格式标志感兴趣。

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

于 2012-06-07T14:42:21.303 回答
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);
于 2012-06-07T14:42:40.907 回答
2

你会发现double值并没有你想的那么精确。它只包含 53 位精度,或大约 15-17 位;之后,它开始对每个结果进行四舍五入。如果你想要一个准确的答案,你的数字需要比这更高的精度,实际上是 92 位或 364 位。

于 2012-06-07T14:53:34.973 回答
0
std::cout << setprecision(5) << val;

http://www.cprogramming.com/tutorial/iomanip.html

于 2012-06-07T14:43:50.880 回答