【发布时间】:2013-06-12 14:09:48
【问题描述】:
有没有一种安全的方法可以将CGFloat“转换”为NSNumber?
NSNumber 具有 numberWithFloat: 和 numberWithDouble: 方法,但 CGFloat 被定义为 float 或 double,具体取决于平台,使用其中任何一种似乎都有风险。
或者numberWithDouble: 与CGFloat 一起使用是否安全,因为它的精度更高?
【问题讨论】:
-
如果你有足够高的编译器版本,直接写@(myNumber),编译时就解决了。但是你可以安全地调用 [NSNumber numberWithDouble: myNumber],如果 CGFloat 被定义为 double 你正确地执行它,它 CGFloat 被定义为是浮动的,你仍然没有失去任何精度。
-
安全吗?你能解释一下吗?
-
安全为“没有精度损失”。这就是我被否决的原因吗?
-
我投了反对票,因为恕我直言,您只是想多了。 C 中充满了处理双精度的函数,它们不会被覆盖以使用浮点数,因为如果您传递浮点数而不是双精度数不会发生任何有害的事情。它只会被隐式转换为 double,这会使用额外的精度。
-
如果您正在处理金钱,您可能希望考虑使用定点或十进制表示。请参阅
NSDecimal和NSDecimalNumber。
标签: objective-c floating-point nsnumber cgfloat