2012-07-14 52 views
2

我正在使用鍵盤類型:UIKeyboardTypeDecimalPad用於兩個UITextField對象。 試圖執行加法時,根據當前語言環境我得到不同的結果:UIKeyboardTypeDecimalPad中的小數點不能用於數學計算

情況1:美國格式:小數點顯示爲.按預期方式。如果我添加12.3(文本字段1)+ 12.3(文本字段2),答案將是24.6。這就是我想要的。但是:

案例2:埃及格式:小數點顯示爲,。如果我重複相同的計算,答案將是24.小數部分被忽略。有沒有解決這個問題?

注:我使用了[textField.text floatValue]方法。

回答

5

因爲floatValue沒有進行非本地化掃描,所以它需要一個「美國格式」。

您可以使用NSScanner對象來對來自字符串的數值進行本地化掃描。

參見:String Programming Guide: Scanners

注的最後一段:

本地化

的掃描儀,基地一些在現場的掃描行爲,這 指定值的語言和公約表示。 NSScanner僅使用語言環境的小數分隔符 (由名爲NSDecimalSeparator的鍵給出)的定義。您可以使用localScannerWithString:創建帶有用戶語言環境的掃描儀 ,或者使用setLocale:明確設置地區設置 。如果您使用 未指定區域設置的方法,則掃描儀將採用默認區域 值。

參見:How to do string conversions in Objective-C?

例子:

NSScanner *scanner = [NSScanner localizedScannerWithString:textField.text]; 
double mynumber; 
if([scanner scanDouble: &mynumber]){ 
    // do something 
}; 
0

您可以使用:

double number = [[self.myTextField.text stringByReplacingOccurencesOfString:@」,」 withString:@」.」] doublevalue]; 

這是確定所有的語言。