浮動小数点数から小数部分を取得する必要があります。次に例を示します。
float x = 18.30;
別のフロートで「.30」を取得する方法が必要です。したがって、フロートは18.30に等しく、別のフロートは.30に等しくなります。
何か案は?
浮動小数点数から小数部分を取得する必要があります。次に例を示します。
float x = 18.30;
別のフロートで「.30」を取得する方法が必要です。したがって、フロートは18.30に等しく、別のフロートは.30に等しくなります。
何か案は?
思い通りに動作する関数があるかどうかはわかりませんが、これを使用できます。
x - floor(x)
上記の受け入れられた答え(x --floor(x))は正の数に対しては機能しますが、負の数に対しては正しくありません。代わりにtrunc()を使用してください。
x - trunc(x)
しかし、fmod()ソリューションは、私に尋ねた場合に使用するソリューションです。
fmod(x, 1)
このmodf()
関数は、これをより直接的に実行しfmodf()
ます。
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;
}
注:他の回答で提案されているように、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
x = 3.5
y = parseInt(3.5)
fraction_part =(xy);