2011-05-11 43 views
3

我用這個方法來說明鍵盤與小數點分隔UIKeyboardTypeDecimalPad - 改變逗號點

myTextField.keyboardType=UIKeyboardTypeDecimalPad; 

我怎樣才能改變逗號分隔點?

我有一個芬蘭語區域。用逗號,小數點在我的應用程序上不起作用。

-(IBAction)calculate { 
    float x = ([paino.text floatValue])/([pituus.text floatValue]) *10000;  
    label.text = [[NSString alloc] initWithFormat:@"%0.02f", x]; 
} 
+0

小數點分隔符取決於當前的語言環境在我的iPhone上,我有一個德語語言環境和一個小數點逗號,在模擬器美國語言環境和點分隔符,所以它似乎工作。在你的設備上選擇的區域設置(或模擬器 - 你沒有說它發生在哪裏)? –

+0

是的,在模擬器上我有美國區域設置,並有一個點作爲分隔符,它的工作原理但在設備上是逗號,它doesn我不知道如何使用逗號作爲小數點分隔符 –

回答

10

OK,所以你編輯使用數字鍵盤,這取決於當前地區的文本字段,從而得到一個數字,這是當前區域dependendt的文本表示,太。編輯完成後,您可以閱讀並想要轉換爲數字。

要轉換你可以使用NSNumberFormatter這樣的:(!)

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 

您可以設置格式隨你便,設置區域,範圍,格式,小數/分組分隔符,小數位數等。那麼你只需要使用它:

float number = [nf numberFromString: field.text]; 

而就是這樣!現在,即使文本中包含逗號,也可以使用數字,前提是您允許鍵盤和格式化程序都具有相同的格式,相同的樣式 - 即可能只是讓當前的語言環境在整個地方使用。

編輯

這是一個貨幣格式化,可以字符串和數字之間進行轉換爲貨幣:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
[nf setNumberStyle: NSNumberFormatterCurrencyStyle]; 
[nf setRoundingMode: NSNumberFormatterRoundHalfUp]; 
[nf setMaximumFractionDigits: 2] 

這是一個百分比格式與4位小數:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
[nf setNumberStyle: NSNumberFormatterPercentStyle]; 
[nf setRoundingMode: NSNumberFormatterRoundHalfUp]; 
[nf setMaximumFractionDigits: 4]; 

都在當前語言環境中。

正如您所看到的,您可以根據您嘗試輸入的數字來定義樣式,數字,舍入行爲等等。有關更多詳細信息(實際上您可以使用NSNumberFormatter完成很多操作),您應該閱讀Apple文檔,它將超出SO回答的範圍來描述這一切。

在你的情況,前提是paino和身體高度也UITextFields:

-(IBAction)calculate { 
    NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
    [nf setRoundingMode: NSNumberFormatterRoundHalfUp]; 
    [nf setMaximumFractionDigits: 2]; 

    float npaino = [[nf numberFromString: paino.text] floatValue]; 
    float npituus = [[nf numberFromString: pituus.text] floatValue]; 

    float x = npaino]/npituus *10000;  
    label.text = [nf stringFromNumber: [NSNumber numberWithFloat: x]]; 

    [nf release]; 
} 

現在,以避免產生在每個計算格式,你可以把它的實例變量,因爲你只需要使用一個的轉換。

+0

感謝Tomasz,但我是IOS SDK和Xcode的新手,你能提供一些更多的信息,我添加了一段代碼,它是一個簡單的計算功能,試圖從書中學習 –

+0

謝謝Tomasz提供了很多信息,但是我有一些錯誤。你能檢查截圖 - http://db.tt/gGOFNeT –

+0

是的,對,我的錯誤,工作與NSNumberFormatter你必須使用NSNumber實例,而不是直接浮動值 - 看看編輯的代碼。現在我沒有XCode進行測試,所以請耐心等待,看看錯誤情況下的文檔 - 如果您使用XCode 4,您可以在正確的檢查器面板中顯示幫助視圖,單擊此處的鏈接帶你到XCode組織者的文檔頁面。 iOS API非常龐大,我仍然一直在做。 –

2

Easyer這樣:
[yourField文本] stringByReplacingOccurrencesOfString:@ 「」 withString:@ 「」]
它會在各方面和語言。

在你的代碼,這將是:

-(IBAction)calculate { 
    float fPaino = [[paino.text stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue]; 
    float x = fPaino/([pituus.text floatValue]) *10000;  
    label.text = [[NSString alloc] initWithFormat:@"%0.02f", x]; 
} 

別的東西:你一定需要一個「黃金」的結果呢?由於label.text已經包含了它的保留/釋放,所以你可以簡單地創建一個[NSString stringWithFormat:@「%0。02f「,x]

+0

試圖追溯修改我的應用程序將不具有成本效益,但這是一個足夠好的解決方法,謝謝! – Leon