我需要从浮点数中得到小数部分,例如:
float x = 18.30;
我需要一种方法在另一个浮点数中得到'.30'所以我的浮点数等于18.30而另一个等于.30
有什么想法吗?
答案 0 :(得分:23)
我不确定是否有一个函数按照你想要的方式完成,但你可以使用它:
x - floor(x)
答案 1 :(得分:18)
上面接受的答案(x - floor(x))适用于正数,但不适用于负数。改为使用trunc():
x - trunc(x)
但是如果你问我,可以使用fmod()解决方案:
fmod(x, 1)
答案 2 :(得分:7)
modf()
函数比fmodf()
更直接地执行此操作。
答案 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;
}
答案 4 :(得分:0)
注意:使用其他答案中建议的modf或fmod。
但是不要指望与atof(“0.30”)具有完全相同的数字 - 正如您的平等请求所示。
实际上,发生atof(“18.30”)是最接近atof(“18.0”)+ atof(“0.30”)的浮点数,但这个操作并不精确,它有一个舍入误差,就像任何总和一样atof(“0.30”)具有整数&gt; 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
答案 5 :(得分:0)
X = 3.5
Y = parseInt函数(3.5)
fraction_part =(x-y);
答案 6 :(得分:0)