在设置整个CGFloat
值(因此通过暗示float
和double
值)时,最好的做法是包括小数点还是无关紧要?例如:
CGRect rect1 = CGRectMake(0, 10, 100, 200); // Approach 1
CGRect rect2 = CGRectMake(0.0, 10.0, 100.0, 200.0); // Approach 2
在设置整个CGFloat
值(因此通过暗示float
和double
值)时,最好的做法是包括小数点还是无关紧要?例如:
CGRect rect1 = CGRectMake(0, 10, 100, 200); // Approach 1
CGRect rect2 = CGRectMake(0.0, 10.0, 100.0, 200.0); // Approach 2
编译器将对浮点数进行隐式转换,因此任何一种方法都应该产生相同的浮点值。
但是,您的方法 2 实际上是指定 double 类型的值,然后将其转换为 float。要显式指定浮点数,您需要添加f
后缀,即200.0f
就我个人而言,我总是指定这样的值,xxx.0f
只是为了提醒我它们是浮点数,并搞砸编译器必须做的额外工作来解释我的代码——它是为了我的出价,而不是相反。
当然我也会这样做:
static const float left = 0.0f;
static const float top = 10.0f;
static const float width = 100.0f;
static const float height = 200.0f;
CGRect rect3 = CGRectMake(left, top, width, height);
通常它们是相同的,因为隐式转换不会导致常见值(如 10、20 等)的精度损失......
但只是在整数溢出的极少数情况下,你最好使用漂浮。
例如:
CGRect rect1 = CGRectMake(0, 10, 100, INT_MAX+1);
对比:
CGRect rect1 = CGRectMake(0, 10, 100, (float)INT_MAX+1);
这两个表达式给出了完全不同的值。
在你的地方,我只使用整数,只有当我需要小数精度时才使用浮点数,或者当我可能冒着整数溢出的风险时。