2

私はキーボード タイプを使用しています: UIKeyboardTypeDecimalPad2 つのUITextFieldオブジェクトに対して。追加を実行しようとすると、現在のロケールに応じて異なる結果が得られます。

ケース 1: US 形式: 小数点.は期待どおりに表示されます。12.3 (テキスト フィールド 1) + 12.3 (テキスト フィールド 2) を足すと、答えは 24.6 になります。それが私が欲しいものです。しかし:

ケース 2: エジプト 形式: 小数点は のように表示され,ます。同じ計算を繰り返すと、答えは 24 になります。小数部分は無視されます。それに対する修正はありますか?

注:[textField.text floatValue]メソッドを使用しました。

4

2 に答える 2

5

floatValueローカライズされていないスキャンを行うため、「US フォーマット」が必要です。

NSScanner オブジェクトを使用して、文字列から数値をローカライズしてスキャンできます。

参照:文字列プログラミング ガイド: スキャナ

最後の段落に注意してください。

ローカリゼーション

スキャナは、そのスキャン動作の一部をロケールに基づいています。ロケールは、言語と値表現の規則を指定します。NSScanner は、ロケールの小数点記号の定義のみを使用します (NSDecimalSeparator という名前のキーによって指定されます)。localizedScannerWithString: を使用してユーザーのロケールでスキャナーを作成するか、setLocale: を使用して明示的にロケールを設定できます。ロケールを指定しない方法を使用する場合、スキャナーはデフォルトのロケール値を想定します。

参照: Objective-C で文字列変換を行うには?

例:

NSScanner *scanner = [NSScanner localizedScannerWithString:textField.text];
double mynumber;
if([scanner scanDouble: &mynumber]){
  // do something
};
于 2012-07-14T22:31:25.170 に答える
0

以下を使用できます。

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

これはすべての言語で問題ありません。

于 2013-02-25T09:45:08.807 に答える