检查浮点数是否为整数

8

在Objective C中,我如何检查存储为浮点数的整数值(例如2.000、3.000、8.000)是否为整数,而不是像2.456、3.578这样的分数?


5
“完全数是指一个正整数等于其所有正因子(不含本身)之和。” 你只想知道它是否有小数,是吗? - David Rönnqvist
你需要定义你所指的是精确整数(这在IEEE浮点数中是可能的,但在其他浮点数格式中不一定),还是仅仅是在给定精度水平下看起来像整数的东西。 - Hot Licks
@HotLicks 我有一个浮点数,它从0.000增加到12.000。我想在数字为整数时触发操作,例如1.000、2.000等。 - sourabhkumbhar
你会以什么尺寸增加它? - Hot Licks
增加随机,值可能为0.000、0.012、0.157、0.587等。实际上是一个角度,它随着触摸而增加。 - sourabhkumbhar
3
将不精确表示的随机分数相加,例如0.012、0.157、0.587,很不可能得到一个精确的整数。你应该允许每个整数周围有一个范围。 - Patricia Shanahan
5个回答

24

我认为你在询问如何判断存储为float的数字是否为整数。有许多技巧,以下是其中一种:

if(fVal == floorf(fVal))
    ... // do something

非常感谢你!!我已经尝试了两天来实现这个基本功能,但都失败了(哈哈)... 你真是我的救命恩人!! - Supertecnoboff

14

使用浮点数余数函数:

if (fmod(fVal, 1.0) == 0.0)
   // is integer

或者
BOOL isInteger = !fmod(fVal, 1.0);

4

我相信这是检查它最简单的方法:

if( fnum == (int)fnum ) {
    //fnum has integer value without decimals
}

2

我个人喜欢

 #define F_ISWHOLENUM(_float) (!fmod(_float, 1.0f))

0
float number = myNum.floatValue;
 CFNumberType numberType = CFNumberGetType((CFNumberRef)myNum);
if(number == floorf(number) && (number == 1 || number == 0))
{
    // It is a bool (Exceptions 1.000, 0.00000)
}
else
{
    // It is some other number use numberTyoe here except kCFNumberCharType
    if (numberType == kCFNumberSInt32Type) {

    }
}

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