设置整个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
答案 0 :(得分:2)
编译器将隐式转换为float,因此任一方法都应该产生相同的浮点值。
但是,您的方法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);
答案 1 :(得分:2)
通常它们是相同的,因为隐式转换不会导致10,20等常见值的精度损失...
但是,在极少数情况下,整数进入溢出状态,你最好使用浮点数
例如:
CGRect rect1 = CGRectMake(0, 10, 100, INT_MAX+1);
Vs:
CGRect rect1 = CGRectMake(0, 10, 100, (float)INT_MAX+1);
这两个表达式给出了完全不同的值 在你的地方,我只使用整数,只有当我需要小数精度,或者当我可能有整数溢出的风险时,转向浮点数。