开发者

NSNumber floatValue not equal to NSNumber value

First post here. Having a problem with NSNumber's floatValue method -- somehow, it returns an imprecise number. Here's the problem: I store a bunch of NSNumbers in an array, like this:

NSArray *a = [NSArray arrayWithObjects:
    [NSNumber numberWithFloat:0.04f],
    [NSNumber numberWithFloat:0.028f], 
    [NSNumber numberWithFloat:0.016f],
    [NSNumber numberWithFloat:0.004f],
   nil];
开发者_如何学Python

Then I try to retrieve the first value (for example): NSNumber n = (NSNumber) [a objectAtIndex:0]; CGFloat f = [n floatValue];

In the debugger, n shows a value of 0.04 (in the summary column), but f shows a value of 0.0399999991. What am I doing wrong here?

Thanks everyone.


You're not doing anything wrong. That's not a problem specifically of NSNumber or CGFloat, either. It's something very universal about the floating point numbers, which is based on powers of 2, not powers of ten. You should read this definitive article or Wikipedia article.

The point is, the standard floating point numbers can only accurately represent a number which is a sum of 1/2, 1/4, 1/8, ... . 1/10 is not. So you can't completely accurately represent 0.1 using standard floating point numbers.

If you really do need to deal with it, there are routines which deal with rational fractions or decimal floating point numbers.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜