2011-05-11 3 views
3

をドットに変更カンマ私は小数点区切りでキーボードを表示するには、このメソッドを使用しUIKeyboardTypeDecimalPad -

myTextField.keyboardType=UIKeyboardTypeDecimalPad; 

は、どのように私はドット区切りにカンマを変更できますか?

フィンランドのロケールがあります。コンマで、小数は私のアプリでは動作しません。あなたも、現在のロケールにdependendtされている番号のテキスト表現を取得するため、現在のロケールに依存した数値キーボードを使用して、テキストフィールドを編集し、そしてので

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

小数点の区切り記号は現在のロケールによって異なります。私のiPhoneでは、ドイツ語のロケールと小数点のカンマが米国のロケールとドット区切り記号に表示されています。あなたのデバイスで選択されたロケール(またはシミュレータ - あなたはどこで起こったのか言っていませんでしたか?) –

+0

はい、シミュレータ上に私はロケールがあり、セパレータとしてドットがありますが、デバイス上にカンマがあり、 –

答えて

10

OK。編集が終わったら、それを読んで数字に変換します。

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

あなたは、ロケールを設定します、制限、書式設定、小数/グループ区切り、小数点以下の桁数などとしてセットアップフォーマッタをすることができます(!):あなたはこのようNSNumberFormatterを使用する変換するには

次に使用してください:

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

それだけです!キーボードとフォーマッタのフォーマットが同じで、同じスタイルになるようにすると、現在のロケールをすべての場所で使用できるようになります。

EDIT

は、これが通貨の文字列と数値の間で変換することができます通貨フォーマッタ、次のとおりです。

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とpituusも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]; 
} 

あなたがそれらの変換のための唯一の1を必要とするので、あなたは、そのインスタンス変数作ることができ、各計算にフォーマッタを作成しないように。そのようEasyer

+0

Tomaszさん、IOS SDKとXcodeの新機能ですが、いくつかの情報を提供することはできますか?私は自分のコードを追加します。 –

+0

多くの情報をお寄せいただきありがとうございますが、いくつかのエラーがあります。スクリーンショットを確認できますか - http://db.tt/gGOFNeT –

+0

正直、私のエラーです。 NSNumberFormatterでは、NSNumberインスタンスを使用する必要があり、値を直接浮動小数点にしてはいけません。編集したコードを直接見てください。今私はここでテストを行うためにXCodeを持っていないので、私に同行し、エラーの場合はドキュメントを見てください。もしあなたがXCode 4を使用しているなら、右のインスペクタパネル内のヘルプビューを表示し、 Xcodeオーガナイザのdocページに移動します。 iOS APIは非常に巨大で、私はまだそれをずっとやっています。 –

2


[[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にはすでにretain/releaseが含まれているので、[NSString stringWithFormat:@ "%0。02f "、x]

+0

私のアプリを遡及的に修正しようとすると、費用対効果はあまりありませんが、これは十分な回避策です。ありがとうございます! – Leon