从浮点数中获取小数部分

20

我需要从一个浮点数中获取小数部分,比如:

float x = 18.30;

我需要一种方法来获取 '.30' 并转换成另一个浮点数.. 这样我将有两个浮点数,一个等于 18.30,另一个等于 .30

有什么想法吗?


2
你想要执行 fmod(18.30, 1.0) 吗? - gbulmer
1
或者简单地写成 y1 = (int)x; y2 = x - y1;,但是对于负数,根据你的意图可能会变得棘手。 - Hot Licks
1
@gbulmer 嗯,fmodf... - lnafziger
1
我只是不理解 downVote 是什么意思。 - newton_guima
7个回答

23

我不确定是否有一个函数可以完全按照你想要的方式执行,但你可以使用以下代码:

x - floor(x)

请注意,对于 x = -18.3,这可能是您期望的结果,也可能不是。 - aka.nice

18

上面接受的答案(x - floor(x))适用于正数,但对于负数行不通。改用trunc()函数:

x - trunc(x)

但如果你问我,fmod() 的解决方案是最好的:

fmod(x, 1)

9

modf() 函数比 fmodf() 更直接地执行此操作。


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;
}

1
我发现使用Objective-C变量类型的最佳方法如下:
CGFloat floatingPointNumber = 18.30;
NSInteger integerNumber = floatingPointNumber;
CGFloat floatingPointNumberWithoutTheInteger = floatingPointNumber - integerNumber;

以下是执行时的结果:

enter image description here


0

x=3.5

y=parseInt(3.5)

小数部分 = (x - y);


0

注意:使用其他答案中建议的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接