2012-04-07 53 views
16

我需要從浮點數中得到小數部分,例如:從浮點數中得到小數部分

float x = 18.30;

我需要一種方法在另一個浮動來獲得」 0.30' ..所以我會有一定的浮動等於18.30和另一個等於0.30

任何想法?

+2

你要FMOD(18.30,1.0 )? – gbulmer 2012-04-07 19:50:47

+1

或者只是'y1 =(int)x; y2 = x - y1;',儘管根據你的意圖它會變成負號。 – 2012-04-07 19:55:50

+1

@gbulmer,fmodf .... – lnafziger 2012-04-07 20:01:00

回答

20

我不知道是否有做的正是你想要的方式功能,但你可以使用這個:

x - floor(x) 
+0

請注意,這可能是,或不是你期望的x = - 18.3 – 2013-06-07 21:13:48

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 2012-04-07 20:06:51

17

上面接受的答案(x - floor(x))適用於正數,但對於負數不適用。如果你問我

x - trunc(x) 

但FMOD()解決方案是使用一個:使用TRUNC()代替

fmod(x, 1) 
0

注:如建議在其他的答案使用MODF或FMOD。

但不要指望與atof(「0.30」)的數字完全相同 - 正如您的平等請求所示。

事實上,atof(「18.30」)是atof(「18.0」)+ atof(「0.30」)的最接近的浮點數,但這個操作並不準確,它有一個舍入誤差,所以當你減去整數部分時,沒有理由找到atof(「0.30」),你只能找到atof(「0.30」)附近的東西「)。

在佳樂/菲羅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 
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