将精确的双精度数转换为字符串

3

我有一个大数在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?
}

1
@Hans 没有任何有用的信息。语言错误。 - Konrad Rudolph
4个回答

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

你可能对scientific格式标识感兴趣。

C++11还有一些有趣的函数std::to_string,你可能想要查看一下!


2
我喜欢对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 facet来解决问题。例如:
char c[30];
std::snprintf(c,sizeof c,"%e",val);

2

您会发现,双精度浮点数并不像您想象的那样精确。它只包含53位精度,或约15-17个数字;之后它开始对每个结果四舍五入。如果您想要一个精确的答案,您的数字需要更多的精度,实际上是92位数字或364位。


0

如何将val转换为字符串/数组?! - Shahbaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接