19

浮動小数点数から小数部分を取得する必要があります。次に例を示します。

float x = 18.30;

別のフロートで「.30」を取得する方法が必要です。したがって、フロートは18.30に等しく、別のフロートは.30に等しくなります。

何か案は?

4

7 に答える 7

23

思い通りに動作する関数があるかどうかはわかりませんが、これを使用できます。

x - floor(x)
于 2012-04-07T19:53:59.047 に答える
18

上記の受け入れられた答え(x --floor(x))は正の数に対しては機能しますが、負の数に対しては正しくありません。代わりにtrunc()を使用してください。

x - trunc(x)

しかし、fmod()ソリューションは、私に尋ねた場合に使用するソリューションです。

fmod(x, 1)
于 2013-04-11T14:25:31.597 に答える
9

このmodf()関数は、これをより直接的に実行しfmodf()ます。

于 2012-04-07T20:05:39.870 に答える
1

fmod関数のファミリーがあります。たとえば、fmod(18.30、1.0)、fmodf(18.30、1.0)などです。

#include <stdio.h>
#include <math.h>

int main (int argc, const char * argv[]) {
    // insert code here...
    printf("%f\n", fmod(18.30, 1.0));
    return 0;
}
于 2012-04-07T20:05:21.967 に答える
1

Objective-Cの変数タイプを使用して私が見つけた最良の方法は次のとおりです。

CGFloat floatingPointNumber = 18.30;
NSInteger integerNumber = floatingPointNumber;
CGFloat floatingPointNumberWithoutTheInteger = floatingPointNumber - integerNumber;

実行時の結果は次のとおりです。

ここに画像の説明を入力してください

于 2016-08-15T06:48:36.397 に答える
0

注:他の回答で提案されているように、modfまたはfmodを使用してください。

ただし、equalsリクエストが示すように、atof( "0.30")とまったく同じ数になるとは思わないでください。

実際、atof( "18.30")はatof( "18.0")+ atof( "0.30")に最も近い浮動小数点数ですが、この演算は正確ではなく、atof( "18.30")の合計と同様に丸め誤差があります。 「0.30」)整数>0。

したがって、整数部分を減算して戻すと、atof( "0.30")を見つける理由はなく、atof( "0.30")の近くにあるものだけが見つかります。

Squeak / Pharo Smalltalkで表現(ここでは倍精度を使用)

(1 to: 100) count: [:i | 0.3 + i = (3/10+i) asFloat].

与える

-> 100

だが:

(1 to: 100) count: [:i | (3/10+i) asFloat - i = 0.3].

与える

-> 0
于 2013-06-07T21:08:33.993 に答える
0

x = 3.5

y = parseInt(3.5)

fraction_part =(xy);

于 2014-05-22T07:56:13.647 に答える