我需要從浮點數中得到小數部分,例如:從浮點數中得到小數部分
float x = 18.30;
我需要一種方法在另一個浮動來獲得」 0.30' ..所以我會有一定的浮動等於18.30和另一個等於0.30
任何想法?
我需要從浮點數中得到小數部分,例如:從浮點數中得到小數部分
float x = 18.30;
我需要一種方法在另一個浮動來獲得」 0.30' ..所以我會有一定的浮動等於18.30和另一個等於0.30
任何想法?
我不知道是否有做的正是你想要的方式功能,但你可以使用這個:
x - floor(x)
請注意,這可能是,或不是你期望的x = - 18.3 – 2013-06-07 21:13:48
有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;
}
上面接受的答案(x - floor(x))適用於正數,但對於負數不適用。如果你問我
x - trunc(x)
但FMOD()解決方案是使用一個:使用TRUNC()代替
fmod(x, 1)
注:如建議在其他的答案使用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
x = 3.5
y = parseInt(3。5)
fraction_part =(x-y);
你要FMOD(18.30,1.0 )? – gbulmer 2012-04-07 19:50:47
或者只是'y1 =(int)x; y2 = x - y1;',儘管根據你的意圖它會變成負號。 – 2012-04-07 19:55:50
@gbulmer,fmodf .... – lnafziger 2012-04-07 20:01:00