2013-08-04 88 views
-1
double M=log(7); 
M=pow(M_E,M);    // M = 7 !!!!!! 

NSString *B = [[NSNumber numberWithDouble:M] stringValue]; // B=6.999999999 !!!! 

但是:雙到的NSString轉換錯誤

double M=7; 
NSString *B = [[NSNumber numberWithDouble:M] stringValue]; // B=7 

爲什麼這兩個例子產生不同的結果?

回答

1

浮點值不能精確地表示每個實數,所以你通常會得到這樣的結果非常輕微。例如,(1.0/3.0) * 3.0沒有精確給出1.

+0

我同意但是; 如果你調試這些代碼;雙M = pow(M_E,log(7)); 您可以在Xcode調試窗口中看到M = 7。 但下面的命令錯誤的工作和生產6.99999999999 NSString * B = [[NSNumber numberWithDouble:pow(M_E,log(7))] stringValue]; –

+0

@BulentUNALMIS:所以調試窗口的代表double和NSNumber的'stringValue'的例程不相同。 – Chuck