1

在设置整个CGFloat值(因此通过暗示floatdouble值)时,最好的做法是包括小数点还是无关紧要?例如:

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

2 回答 2

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);
于 2012-12-09T18:57:16.943 回答
2

通常它们是相同的,因为隐式转换不会导致常见值(如 10、20 等)的精度损失......
但只是在整数溢出的极少数情况下,你最好使用漂浮。
例如:

CGRect rect1 = CGRectMake(0, 10, 100, INT_MAX+1);

对比:

CGRect rect1 = CGRectMake(0, 10, 100, (float)INT_MAX+1);  

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

于 2012-12-09T19:03:11.207 回答