2016-09-29 8 views
0

long doubleという変数をJSON形式で格納する必要があります。 JSONはdoubleの変数をサポートしていますが、long doubleはサポートしていません。それで、long doubleの値をいくつかの値で分割しなければならないが、私はそれを簡単に行う方法を知らない。複数の倍精度変数に長いdoubleを格納

私はすでにこの方法によってlong long intの変数のことをやった:

std::vector<long int> long_long_int__to__long_int(long long int x) 
{ 
    std::vector<long int> split; 
    const unsigned long int n = sizeof(long long int)/sizeof(long int); 
    for(unsigned long int i = 1; i < n; ++i) 
    { 
    split.push_back((long int)(x % (long long int)std::numeric_limits<long int>::max)); 
    x /= (long long int)std::numeric_limits<long int>::max; 
    } 
    split.push_back(x); 
    return split; 
} 

浮動小数点変数であることを行うにはどのように任意のアイデアを?

+0

に文字列 - (確か、彼らはあなたのJSONのように種類が正しくありませんが、int型を持つか、文字列は/こと浮かびますデータの中の数字を実際に表現していないのは、あなたの正確な使い方を知らないうちに私にとって悪化します。 –

+0

@ b.buchhold:もちろん、最終的なjsonサイズの点では非常に高価です。これは、json形式でたくさんのデータを保存するように設計されています(バイナリファイルでのダンピングの同様の使用)。 – Caduchon

+0

みんな、穏やかに、なぜこの質問をd​​ownvote私を説明する? – Caduchon

答えて

1

これは私が考えることができる解決策であり、あなたの長いlong int問題にも当てはまります。

  1. 長整数型でも長整数型でも、16進値の配列として格納する任意の型を考えてください。
  2. Binary-to-text encodingアルゴリズムを1つ選択し、それを使用して配列を読み取り可能な文字列に変換します。
  3. ストアそれはあなたのために、あなただけのすべての個々のバイト格納することができ便利だ場合JSON
1

2つの倍数を格納します。(double)x(double)(x - (double)x)です。 (コンパイラのバグやスイッチが精度の処理に影響を与えることに注意してください。そうしたテクニックを使用すると問題が発生する可能性があります(例:a gcc bug)。

関連する問題