2012-06-07 208 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位。

相關問題