2012-04-07 6 views
16

のうち、小数部分を取得します。私は例えば、フロート数のうち、小数部分を取得する必要があります浮動小数点数

フロートのx = 18.30;

私は別のフロートの「0.30' を取得する方法が必要です。..ので、私はすべてのアイデアをフロートは18.30に等しく、別の1が0.30

に等しいだろうか?

+2

あなたはFMOD(18.30、1.0をしたいですか)? – gbulmer

+1

または単に 'y1 =(int)x; y2 = x - y1; '、あなたの意図に応じて、負の数でほの暗くなります。 –

+1

@gbulmerよく、fmodf .... – lnafziger

答えて

20

は、私はあなたが望む正確な方法をやっ機能があるかどうかわからないが、あなたは、この使用することができます:

x - floor(x) 
+0

これはそうかもしれないか、あなたが期待していないx = - 18.3 –

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; 
} 
8

modf()機能をより直接的にfmodf()よりこれを行います。

+0

Doh!私の貧しい古い脳:-) – gbulmer

17

上記の回答(x - floor(x))は正の数では機能しますが、負の数では正解ではありません。代わりに)(TRUNCを使用します。

fmod(x, 1) 
0

注:他の回答で提案されているようにMODFまたはFMODを使用し

x - trunc(x) 

しかし、FMOD()ソリューションは、あなたが私に言わせれば使用する1つです。

しかし、あなたの等価要求が示唆するように、atof( "0.30")と正確に同じ数字を持つとは思わないでください。

実際、atof( "18.0" + atof( "0.30")に最も近い浮動小数点数ですが、この操作は正確ではありません。 atof( "0.30")と整数> 0

したがって、整数部分を減算すると、atof( "0.30")を戻す理由はありません。atof( "0.30" ")。 Squeakの/ファロの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 
を与えます3210
0

x = 3.5

y = parseInt(3。5)

fraction_part =(x-y);

0

私はObjective-Cの変数の型を使用した最良の方法は、以下の通りである:

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

後、実行時に結果である:

enter image description here

関連する問題