19

我需要从浮点数中取出小数部分,例如:

浮动 x = 18.30;

我需要一种在另一个浮点数中获得“.30”的方法。所以我将有一个等于 18.30 的浮点数,另一个等于 0.30

有任何想法吗?

4

7 回答 7

23

我不确定是否有一个功能完全符合您的要求,但您可以使用它:

x - floor(x)
于 2012-04-07T19:53:59.047 回答
18

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

x - trunc(x)

但是如果你问我,fmod() 解决方案是可以使用的:

fmod(x, 1)
于 2013-04-11T14:25:31.597 回答
9

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

于 2012-04-07T20:05:39.870 回答
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;
}
于 2012-04-07T20:05:21.967 回答
1

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

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

以下是执行时的结果:

在此处输入图像描述

于 2016-08-15T06:48:36.397 回答
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
于 2013-06-07T21:08:33.993 回答
0

x=3.5

y=parseInt(3.5)

分数部分 =( xy );

于 2014-05-22T07:56:13.647 回答