2012-10-12 59 views
2

所以我想將NSString轉換爲double。我發現下面的例子:將NSString解析爲Double

NSString * s = @"1.5e5"; 
NSLog(@"%lf", [s doubleValue]); 

它的工作原理,但如果doubleValue不能轉換串翻一番它只是返回0.0這不是我所需要的。我需要一些方法試圖將double的字符串表示轉換爲double,並且如果以某種方式指示它不能被轉換。 C#具有優異的方法

double d; 
boolean Double.TryParse(str, out d) 

是否有任何方法與上述類似的一個目標C?或者使用正則表達式更好?然而,我不知道該怎麼做。

+0

人另一個例子認爲正則表達式是一切的最終魔法解決方案,它帶來了世界的和平...... – 2012-10-12 19:50:31

+0

順便說一下,你在做什麼是**未定義的行爲。**如果它打印出正確的值,我不會感到驚訝如果您使用'%lf'而不是'%f'(這是'flo at's而不是'double's ...) – 2012-10-12 19:52:09

+0

@ H2CO3:根據[字符串編程指南/格式說明符](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ Strings/Articles/formatSpecifiers.html),當格式化時,'%f'使用'float'和'double'。只有掃描你必須區分。 –

回答

7

可以使用NSScanner類:

NSString *s = @"1.5e5"; 
NSScanner *scanner = [NSScanner scannerWithString:s]; 
double d; 
BOOL success = [scanner scanDouble:&d]; 

如果你想確保整個字符串被掃描(在數字後沒有多餘的字符),使用

BOOL isAtEnd = [scanner isAtEnd];