2014-02-24 46 views
0

獲得正確的本地化格式的數字顯示很容易。 但提示輸入來自UITextField的十進制數是棘手的。如何從UITextField獲取NSNumber和NSLocale智能?

儘管小數小鍵盤可能會顯示歐洲用法的逗號而不是stop,但處理輸入的方法顯然仍需要具有語言環境知識。

我在這裏研究S.O.和其他地方建議

-(IBAction)buttonPress:(UIButton *)sender 
{ 
NSNumber *firstNumber = @([self.firstField.text floatValue]); // 2 alternative ways 
NSNumber *secondNumber = [NSNumber numberWithFloat:[self.secondField.text floatValue]];  
. 
. 

只給我整數進行算術。他們根本不是花車。他們沒有浮點值

假設這是應用程序做的唯一的事情,我馬上做:

. 
. 
NSNumberFormatter *numberFormat = [[ NSNumberFormatter alloc] init]; 
[ numberFormat setNumberStyle:NSNumberFormatterDecimalStyle]; 
[ numberFormat setLocale:[NSLocale currentLocale]]; 
[ numberFormat setMaximumFractionDigits:2]; 

NSString *displayString = [ numberFormat stringFromNumber:firstNumber]; 
self.resultLabel.text = displayString; 
} 

我扔輸入回標籤,在視圖控制器沒有任何進一步的處理,以確保由於沒有格式化程序,小數點不會被隱藏。沒有喜悅。仍然是整數。

顯然,應用必須做一些計算的方式,因爲一個不能直接處理的NSNumber包裝,我必須解決它,我做轉換件事:

double xD = [firstNumber doubleValue]; 
double yD = [secondNumber doubleValue]; 

問題是,輸入的小數位數在哪裏丟失? 我對臺式機鍵盤和模擬器沒有任何問題,但是如果我設置了一個測試設備 - 說 - 波蘭語,那麼根本不會這樣做。

編輯: ,這裏是從下面

// run these 4 methods first, that way you can re-use *numberFormat for the display 
NSNumberFormatter *numberFormat = [[ NSNumberFormatter alloc] init]; 
[ numberFormat setNumberStyle:NSNumberFormatterDecimalStyle]; 
[ numberFormat setLocale:[NSLocale currentLocale]]; 
[ numberFormat setMaximumFractionDigits:2]; 

// here 'tis 
NSNumber *firstNumber = [numberFormat numberFromString:self.firstField.text]; 
// do the same for other input UITextFields 
// sh-boom. there you go 
+0

我要補充得到規則的輸入,然後轉換爲NSNumber的是一樣無果而終。該方法不知道逗號是什麼 – aremvee

回答

1

提供了答案您需要使用longLongValue不給的longValue NSString的轉換長型的結果。或使用NSNumberFormatter - >numberFromString:

+0

是的! longLongValue沒有爲我做,但NSNumberFormatter-> numberFromString:做得很好。咦!現在它向我指出,它非常明顯會出現與NSNumberFormatter-> stringFromNumber:方法相反的結果。爲什麼我以前沒有看到?我會添加一個代碼修改,以便其他蚱蜢遵循其中的好處 – aremvee