20

次のコードを実行すると、

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

float 値が 10000000.01 ではなく 10000000.00 に変更されたのはなぜですか?

4

3 に答える 3

44

floatは 32 ビットdoubleですが、64 ビットです。float の有効桁数は double よりも少なくなります。

float10 桁を保持するのに十分な値が格納されていません10000000.01

詳細については、float と double の違いも参照してください。これは C/C++ に関するものですが、Objective-C にも当てはまります。

于 2013-04-19T15:45:50.330 に答える