2011-07-26 51 views
0

將一些信息進行轉換我將字符串接收到一個浮點數來獲得它們的總和。目的c:解析字符串爲浮點數,避免額外的小數點

問題是,當我轉換浮動,例如:

myString = @"13502.63" 
float *f = [myString floatValue]; 
NSLog(@"Converted %f", f); 

「F」的結果是13502.629883

這件事是確定的一些值,但是當我有添加大量的這些值,這些額外的小數點會導致結果不正確。

請問有人可以幫我嗎?

感謝

+0

你是什麼意思,額外的小數使結果不正確? – sergio

+0

有浮動**的值不能**完全表示。當您嘗試將該值存儲在浮點數中時,實際上會得到*最接近的可表示值*。當您對浮動執行一系列操作時,可能會失去準確性。改用'NSDecimalNumber'。 – albertamg

回答

1

不幸的是,任何語言的所有浮點類型都會遇到這個問題,因爲它們必須轉換爲底層的二進制整數格式。

你有沒有考慮過使用NSDecimalNumber?

這些將比浮動速度慢得多,但如果這不是問題,那麼它們對於這樣的計算準確得多。

如果您因爲某些原因需要速度,雙倍或雙倍精度是否足夠準確?

+0

我改變了雙倍,它的工作完美,謝謝! –

+0

只要小心,雙精度會提高精度,但同樣的鋸齒效應可能會發生,但在小得多的小數位上 - 如果雙精度足以滿足您的應用要求 - 雖然 - 非常好。 – iandotkelly

2

如果你想準確性你不應該使用浮動。使用NSDecimalNumber

NSString *myString = @"13502.63"; 
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:myString]; 
1

float數字沒有確切的表示,這就是「13502.63」轉換爲13502.629883的原因;這是最接近原始數字的浮點數。

所以,我不認爲有一個簡單的解決方案與浮法。您應該嘗試NSDecimalNumber。我不知道表現,但它應該給你一個確切的表示。

+0

你能解釋一下最接近的浮點數是什麼意思?花車是否有謹慎的價值?我的意思是,13502.630000不是可能的浮動嗎? –

相關問題