首页 文章

如何将Float64分配给NSInteger变量?

提问于
浏览
0

这个功能如何工作?

- (NSInteger)selectFpsForFormat:(AVCaptureDeviceFormat *)format {
  Float64 maxSupportedFramerate = 0;
  for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
    maxSupportedFramerate = fmax(maxSupportedFramerate, fpsRange.maxFrameRate);
  }
  return fmin(maxSupportedFramerate, kFramerateLimit);
}

因为 return fmin(maxSupportedFramerate, kFramerateLimit); 它是一个float64而不是一个NSInteger?

1 回答

  • 3

    因为Objective-C是C,C specification表示:

    6.3转换6.3.1算术操作数6.3.1.4实浮点和整数1当实数浮点类型的有限值转换为_Bool以外的整数类型时,小数部分被丢弃(即,该值被截断为零) . 如果整数部分的值不能用整数类型表示,则行为是未定义的 .

    另请参阅 return 语句的定义,了解在这种情况下算术转换适用的原因:

    6.8.6.4 return语句3如果执行带有表达式的return语句,则表达式的值将作为函数调用表达式的值返回给调用者 . 如果表达式的类型与其出现的函数的返回类型不同,则转换该值,就好像通过赋值给具有函数返回类型的对象一样 .

    然后再去阅读6.5.16.1.3简单的任务......你可以继续沿着规格的兔子洞走下去,尽可能深 . :d

    但关键的一点是,在C中,浮点值可以隐式转换为整数,并且指定了转换后的方式 .

相关问题