从浮点数中获取Decimal部分

时间:2012-04-07 19:48:36

标签: objective-c xcode floating-point

我需要从浮点数中得到小数部分,例如:

float x = 18.30;

我需要一种方法在另一个浮点数中得到'.30'所以我的浮点数等于18.30而另一个等于.30

有什么想法吗?

7 个答案:

答案 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)

我发现使用Objective-C变量类型的最佳方法如下:

CGFloat floatingPointNumber = 18.30;
NSInteger integerNumber = floatingPointNumber;
CGFloat floatingPointNumberWithoutTheInteger = floatingPointNumber - integerNumber;

以下是执行时的结果:

enter image description here