【问题标题】:Check if float value is integer检查浮点值是否为整数
【发布时间】:2013-11-29 21:26:25
【问题描述】:

在 Objective C 中,我如何检查 value 是否是整数,如 2.000、3.000、8.000 存储为浮点数,而不是像 2.456、3.578 这样的小数

【问题讨论】:

  • "a perfect number 是一个正整数,等于其适当的正除数之和" 你只想知道它是否有小数,对吗?
  • 您需要定义您是指一个精确的整数(这在 IEEE 浮点数中是可能的,但在某些其他浮点数格式中是可能的),或者只是在给定精度级别上看起来是整数的东西。跨度>
  • @HotLicks 我的浮点数从 0.000 增加到 12.000。我想在数字是整数时触发动作,例如 1.000,2.000 等。
  • 然后你以多大的增量增加它?
  • @SourabhKumbhar 添加不能精确表示的随机分数,例如 0.012、0.157、0.587,不太可能产生精确的整数。您可能应该允许每个整数都有一个范围。

标签: objective-c floating-point numbers


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    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) {
    
        }
    }
    

    【讨论】:

      【解决方案3】:

      使用浮点余数函数:

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

      BOOL isInteger = !fmod(fVal, 1.0);
      

      【讨论】:

        【解决方案4】:

        我个人喜欢

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

        【讨论】:

          【解决方案5】:

          我想您是在问如何找出存储为 float 的数字是否为整数。有许多技术。这是一个:

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

          【讨论】:

          • 非常感谢您!这两天我一直在尝试实现这个基本功能,但失败了(哈哈)....你是救命稻草!!
          猜你喜欢
          • 1970-01-01
          • 2023-03-14
          • 2011-08-13
          • 2013-02-25
          • 1970-01-01
          • 2013-12-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多