2013-04-19 8 views
12

Kiedy uruchomić poniższy kod,Jaka jest różnica między zmienną a podwójną?

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"); 
} 

Odpowiedź jest jak następujące.

2013-04-19 17:07:29.284 float[2991:907] OK Float 
2013-04-19 17:07:29.287 float[2991:907] Over value 

Dlaczego wartość zmiennoprzecinkowa została zmieniona na 10000000,00 zamiast 10000000.01?

+5

Wypróbuj [Google] (https://www.google.com/#q=single%20precision%20vs%20double%20precision&fp=1&bav=on.2,or.r_cp.r_qf.&cad=b) i przeczytaj o różnica między 'float's (pojedyncza precyzja) i' double's (podwójna precyzja). –

+2

SA * to * Google. Miejsce, w którym większość ludzi kończy się podczas logowania;) –

Odpowiedz

28

float jest 32-bitowy, a double jest 64-bitowy. Liczba zmiennoprzecinkowa ma mniej znaczących cyfr niż podwójna.

Wartość float nie mieści się wystarczająco, aby pomieścić 10 cyfr numeru 10000000.01.

Aby uzyskać więcej informacji, zobacz także Difference between float and double. Chodzi o C/C++, ale odnosi się to również do Objective-C.

Powiązane problemy