将精度double转换为字符串

时间:2012-06-07 14:39:32

标签: c++ arrays string double precision

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

4 个答案:

答案 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;

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