正确指定非分数CGFloat值

时间:2012-12-09 18:42:31

标签: objective-c cocoa

设置整个CGFloat值(因此隐含floatdouble值)时,最佳做法是包含小数点还是无关紧要?例如:

CGRect rect1 = CGRectMake(0, 10, 100, 200);         // Approach 1
CGRect rect2 = CGRectMake(0.0, 10.0, 100.0, 200.0); // Approach 2

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);  

这两个表达式给出了完全不同的值 在你的地方,我只使用整数,只有当我需要小数精度,或者当我可能有整数溢出的风险时,转向浮点数。