我正在尝试制作基于时间的绘图。例如:定义一个点供以后使用。
CGPoint testPoint = CGPointMake(2341.2345, 1350046324.1234);
然后testPoint.y变成1350046336.00,这不是我们放在那里。 我正在使用Xcode 4.5。 有任何想法吗?感谢。
答案 0 :(得分:2)
CGPoint
在CGGeometry.h
中定义:
struct CGPoint {
CGFloat x;
CGFloat y;
};
在32位系统上CGFloat
是typedef
到float
。 iPhone / iPad是一个32位系统。最后一条信息--C中的float
数字(目标C是C的严格超集):
C中的浮点数使用IEEE 754编码。 由于这种编码,你永远不能保证你不会 你的价值会发生变化。
您可以在此处阅读整个讨论:float vs. double precision
答案 1 :(得分:1)
CGPoint使用float(32bit)数据类型(至少在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
所以你只剩下单精度浮点数足够好的数字范围。 多数民众赞成。
BTW。:在我偶然发现你的问题之前,我确实认为CGFloat是双倍的。答案 2 :(得分:0)
如果你写:
CGPoint testPoint = CGPointMake(2341.2345f, 1350046324.1234f);
它更好吗?