当我运行以下代码时,
NSString* s= @"10000000.01"; float f = [s floatValue]; double d = [s doubleValue]; if(f > 10000000) { NSLog(@"Over Value"); } else { NSLog(@"OK Float"); } if(d > 10000000) { NSLog(@"Over value"); } else { NSLog(@"OK Double"); }
响应如下.
2013-04-19 17:07:29.284 float[2991:907] OK Float 2013-04-19 17:07:29.287 float[2991:907] Over value
为什么浮点值更改为10000000.00而不是10000000.01?
解决方法
float是32位,而double是64位.浮点数的有效数字少于双倍.
浮点值不足以容纳10000000.01的10位数字.
另请参阅Difference between float and double了解更多详情.那就是C/C++,但它也适用于Objective-C.