2011-10-06 94 views
1

我看過這個question,但它已經2歲了。有更好的\容易\更新的方式來檢查字符串是否有數字值。 e.g 1或1.54或-1或-1.54等等等等如何檢查字符串的內容是否是數值?

+0

的可能重複[如何轉換一個NSString成一個NSNumber](http://stackoverflow.com/questions/1448804/how-to-convert-an-nsstring-into-an-nsnumber) –

+0

謝謝@Dave,我添加了方法和歸屬到我的答案。 – zaph

回答

7
bool status; 
NSScanner *scanner; 
NSString *testString; 
double result; 

scanner = [NSScanner scannerWithString:testString]; 
status = [scanner scanDouble:&result]; 
status = status && scanner.scanLocation == string.length; 

如果狀態== YES則該字符串是完全數字。

或者像@戴夫從這個SO answer指出:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
number = [formatter numberFromString:string]; 
status = number != nil; 

(我不是漏水,我使用ARC :-))

+0

對於我在Objective CI中花費的幾個星期將採取任何事情來避免alloc \ init.BTW'(I'米不漏,我使用ARC :-))'請詳細說明可能是像我這樣的初學者的方便提示。 –

+2

好吧,如果'alloc/init'打擾你太多了,你可以使用'new',儘管它已被棄用:NSNumberFormatter * formatter ='[NSNumberFormatter new];'但我不建議這樣做。在Xcode 4.2和IOS 4.3及以上版本中提供的ARC(自動引用計數)不需要「保留」,「釋放」或「自動釋放」,實際上它們是不允許的。好的,我的評論:通常會得到一段代碼片段中缺少版本的評論,我的snarky評論是針對這種可能性的,最終我們需要掌握release/autorelease在代碼中不需要的代碼。 – zaph

-1

可以使用[NSString floatValue]

+2

Thant將無法工作,它將返回0作爲垃圾,與@「0」相同。 – zaph

+0

現在的問題不是如何轉換,而是如何檢查字符串是否可以轉換爲一些數值 – shebelaw

相關問題