2

float の小数部を取得する方法は知っていますが、設定する方法がわかりません。関数によって返される 2 つの整数があります。1 つは整数を保持し、もう 1 つは小数部分を保持します。例えば:

int a = 12;
int b = 2; // This can never be 02, 03 etc
float c;

c12.2 になるにはどうすればよいですか? 次のようなものを追加できることはわかっています(float)b \ 10が、b が >= 10 よりも大きい場合はどうなりますか? 次に、100 で割る必要があります。私ができる機能や何かがありますsetfractional(c, b)か?

ありがとう

編集:この問題について考えれば考えるほど、それがいかに非論理的であるかが分かります。b == 1 の場合は 12.1 になりますが、b == 10 の場合も 12.1 になるため、これをどのように処理するかわかりません。関数が小数の場合、>= 10 の数値を返すことはないと思いますが、わかりません。

4

3 に答える 3

0

何かのようなもの:

float IntFrac(int integer, int frac)
{
    float integer2 = integer;
    float frac2 = frac;

    float log10 = log10f(frac2 + 1.0f);
    float ceil = ceilf(log10);
    float pow = powf(10.0f, -ceil);

    float res = abs(integer);
    res += frac2 * pow;

    if (integer < 0)
    {
        res = -res;
    }

    return res;
}

イデオネ: http://ideone.com/iwG8UO

これは、log10(98 + 1) = log10(99) = 1.995、ceilf(1.995) = 2、powf(10, -2) = 0.01、99 * 0.01 = 0.99、そして 12 + 0.99 = 12.99 と言っているようなものです。サインをチェックします。

そして、IEEE 754 フロート計算の気まぐれに悩まされないことを祈りましょう :-)

doubleの代わりに使用する方がおそらく良いだろうと付け加えておきますfloat。3D グラフィックス以外でfloatは、最近では良いアイデアを使用していた分野はほとんどありません。

于 2013-08-11T18:11:41.800 に答える