0

タイトルにあるように、複数桁の double を、それぞれ 4 桁を含む複数の部分に分割したいと考えています。

double を最も近い整数に丸めたので、小数部はありません。残っているのは、最大の long long 整数をはるかに超える、非常に長い double です。

整数の部分をいくつかの 4 桁の部分に分割する必要があります。これは、整数の場合は非常に単純です。while ステートメントは次のようになります。

unsigned long long int IntegerWithSeveralParts;
unsigned short int i = 0;
unsigned int Parts[10];
while ( IntegerWithSeveralParts )
{
    Parts[i] = IntegerWithSeveralParts % 10000;
    IntegerWithSeveralParts /= 10000;
    ++ i;
}

はい、部品の順序が逆であることは知っていますが、ベクトルで修正できます。問題は、float と double に対してモジュラーを実行できないことです。これは私にとって非常に大きな問題です。それらを文字列に変換し、そこから分割することはできますが、ストリームの使用が含まれるため、かなり時間がかかります。

とにかく他にそれをすることはありますか?

4

4 に答える 4

3

10000 を掛けてから 10000 で変調することにより、小数部分を常に整数に「昇格」させることができます。これを繰り返して、さらに 4 桁のチャンクを取得します。

于 2013-06-05T04:39:09.530 に答える
3

からのfmod()関数ファミリは、関数の 2 つの引数であるwhereおよびare<cmath>の浮動小数点の剰余を提供します。x / yxy

于 2013-06-05T04:39:11.983 に答える
3

fmodは、浮動小数点モジュラー演算に使用できます。しかし、より簡単な解決策は、stringstream を使用してフロートを文字列に変換し、文字列を最大 4 つの長さの断片に分割することです。

于 2013-06-05T04:41:25.867 に答える