1

我正在尝试制作基于时间的绘图。例如:定义一个点供以后使用。

CGPoint testPoint = CGPointMake(2341.2345, 1350046324.1234);

然后 testPoint.y 变为 1350046336.00 ,这不是我们放在那里的。我正在使用 Xcode 4.5。有任何想法吗?谢谢。

4

3 回答 3

2

CGPoint定义在CGGeometry.h

struct CGPoint {
  CGFloat x;
  CGFloat y;
};

在 32 位系统上CGFloat是. iPhone/iPad 是 32 位系统。最后一条信息 - C 中的数字(目标 C 是 C 的严格超集):typedeffloatfloat

C 中的浮点数使用 IEEE 754 编码。由于这种编码,您永远无法保证您的价值不会发生变化。

你可以在这里阅读整个讨论:float vs. double precision

于 2012-10-12T11:47:04.683 回答
1

CGPoint 使用浮点(32 位)数据类型(至少在 iOS6 上)。

从标题:

CGPointMake(CGFloat x, CGFloat y) ...

typedef CGFLOAT_TYPE CGFloat;

# define CGFLOAT_TYPE float

所以这导致我的测试代码:

CGPoint testPoint1 = CGPointMake(2341.2345, 1350046324.1234);
CGPoint testPoint2 = CGPointMake(2341.2345f, 1350046324.1234f);
double d = 1350046324.1234;
float f = 1350046324.1234;

NSLog(@"%f %f %f %f", testPoint1.y, testPoint2.y, d, f);

打印到日志:

1350046336.000000 1350046336.000000 1350046324.123400 1350046336.000000

所以你只是离开了单精度浮点数足够好的数字范围。就这样。

顺便说一句:在我偶然发现你的问题之前,我确实认为 CGFloat 是双倍的。

于 2012-10-12T11:54:52.057 回答
0

如果你写:

CGPoint testPoint = CGPointMake(2341.2345f, 1350046324.1234f);

好点吗 ?

于 2012-10-12T11:43:34.843 回答