2013-06-27 47 views
1

我想一個字符串轉換例如用轉換因子的NSString(例如@ 「3/4」)到的NSNumber

NSString *stringWithNumber = @"3/4" 

NSNumber。 這可能怎麼樣?

+0

你想把它轉換成什麼? '3'? '4'? '0.75'? –

+0

你想要的是一個表達式解釋器/評估器。我不知道iOS上有任何「標準」,但我認爲有幾個開源軟件正在流行。 –

+2

對於'@「3.0/4.0」',您可以使用'NSExpression',如下面的示例所示:http://stackoverflow.com/a/12500518/1187415。但對於你的輸入,將做一個整數除法併產生零。 - 另請參見[什麼是快速C或Objective-C數學解析器?](http://stackoverflow.com/questions/4892152/what-is-a-fast-c-or-objective-c-math-parser) 。 –

回答

5

您可以使用NSEXpression來「計算」該值。請注意,你將有「3/4」的普通int分區問題。

NSExpression *expression = [NSExpression expressionWithFormat:@"3.0/4.0"]; 
NSNumber *result = [expression expressionValueWithObject:nil context:nil]; 
+2

圓滑,即使輸入字符串是'3/4',正如您已經注意到的那樣,它將無法按預期工作。 –

+1

在這種情況下,我已經解決了'int'問題。看到這個 - [Convert to Float and Calculate](http://stackoverflow.com/questions/1415536​​0/convert-to-float-and-calculate/14155699#14155699) – TheTiger

+0

@TheTiger看起來不錯! –

4

如果你只用n/m分數的工作,你的意思是有代表的部分結果的數量,你可以這樣做

NSString *fraction = @"3/4"; 
NSArray *components = [fraction componentsSeparatedByString:@"/"]; 
float numerator = [components[0] floatValue]; 
float denominator = [components[1] floatValue]; 
NSNumber *result = @(numerator/denominator); 
NSLog(@"%@", result); // => 0.75 

當然,這可以很容易地在畸形字符串的情況下,打破,因此您可能需要在執行上述計算之前檢查格式。

注意

如果在輸入來的分數與本地浮動師兼容的格式,大衛的答案肯定是更時尚,比我少笨重。雖然如果您有像@"3/4"這樣的輸入,它將無法按預期工作,並且您肯定需要按照上面的建議進行操作。

底線,您應該指定更好的要求。

+0

只有在3/4,5/6 .... n/m的情況下,您的答案才能起作用。如果字符串是其他格式呢? – TheTiger

+0

引用我自己的答案。 *當然,如果字符串格式不正確,這可能會很容易中斷,所以在執行上述計算之前,您可能需要檢查格式。*如果沒有OP的更多信息,我可以說更多。坦率地說,我認爲我的答案不值得贊成,因爲它解決了OP所暴露的問題。 –

+0

問題是**我想將一個字符串轉換爲NSNumber,例如____ **,例如這意味着這僅僅是一個例子。 – TheTiger