2011-09-28 63 views
0

當我試圖通過NSNumberFormatterNSNumberFormatter錯誤?

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 
[formatter setPositiveFormat:@"###0.##"]; 

NSNumber *result = [formatter numberFromString:@"8.8"]; 
NSLog(@"%@", [result stringValue]); 
[formatter release]; 

結果是8.800000000000001到的NSString @"8.8"轉換爲NSNumber的。

對於任何其它值(即:6.67.79.91.24.7等),記錄的結果是完全一樣的NSString傳遞給numberFromString方法。

我正在使用XCode 4.1和4.3模擬器。如果我放入(或不放入)setMaximumFractionDigits或/和setPositiveFormat,則結果始終爲8.800000000000001。發生什麼事?

回答

4

大多數不是整數的數字不能在浮點變量中精確表示。有一個類0123',它以一個開銷爲代價處理精確值,這主要用於貨幣計算。

參見:WIkipedia
浮點數是有理數,因爲它們可以被表示爲一個整數除以另一個。但是,基礎確定可以表示的分數。例如,1/5不能完全表示爲使用二進制基數的浮點數,但可以使用小數基數精確表示。