我需要从一个浮点数中获取小数部分,比如:
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)
有一系列的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=3.5
y=parseInt(3.5)
小数部分 = (x - y);
注意:使用其他答案中建议的modf或fmod。
但是,不要期望得到与atof(“0.30”)完全相同的数字-正如您的等式请求所示。
事实上,发生的情况是,atof(“18.30”)是最接近atof(“18.0”)+ atof(“0.30”)的浮点数,但这个操作不是精确的,它有一个舍入误差,就像任何大于0的整数与atof(“0.30”)之和一样。
因此,当您减去整数部分时,没有理由找到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
y1 = (int)x; y2 = x - y1;
,但是对于负数,根据你的意图可能会变得棘手。 - Hot Licks