我需要从浮点数中取出小数部分,例如:
浮动 x = 18.30;
我需要一种在另一个浮点数中获得“.30”的方法。所以我将有一个等于 18.30 的浮点数,另一个等于 0.30
有任何想法吗?
我需要从浮点数中取出小数部分,例如:
浮动 x = 18.30;
我需要一种在另一个浮点数中获得“.30”的方法。所以我将有一个等于 18.30 的浮点数,另一个等于 0.30
有任何想法吗?
我不确定是否有一个功能完全符合您的要求,但您可以使用它:
x - floor(x)
上面接受的答案 (x - floor(x)) 适用于正数,但不适用于负数。改用 trunc() :
x - trunc(x)
但是如果你问我,fmod() 解决方案是可以使用的:
fmod(x, 1)
该modf()
函数比 更直接地执行此操作fmodf()
。
有一系列 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;
}
注意:按照其他答案中的建议使用 modf 或 fmod 。
但是不要期望与 atof("0.30") 具有完全相同的数字 - 正如您的 equals 请求所建议的那样。
事实上,atof("18.30") 是最接近 atof("18.0") + atof("0.30") 的浮点数,但是这个操作并不精确,它有一个舍入误差,任何 atof( "0.30") 整数 > 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
x=3.5
y=parseInt(3.5)
分数部分 =( xy );