獲得正確的本地化格式的數字顯示很容易。 但提示輸入來自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
我要補充得到規則的輸入,然後轉換爲NSNumber的是一樣無果而終。該方法不知道逗號是什麼 – aremvee