3

正確な double 値として格納されている 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 に答える