2

さて、私は機能し、ラベル(numberField)に0.00として数字を表示するカスタムテンキーを持っています。今度は$0.00を表示する必要があります。

NSString *digit = sender.currentTitle;
numberField.text = [numberField.text stringByAppendingString:digit];

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setGroupingSeparator:@""];
[numberFormatter setMaximumIntegerDigits:4];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMaximumFractionDigits:2];

numberField.text = [numberField.text stringByReplacingOccurrencesOfString:@"." withString:@""];
NSDecimalNumber *currency = [[NSDecimalNumber decimalNumberWithString:numberField.text] decimalNumberByDividingBy: [NSDecimalNumber decimalNumberWithString:@"100"]];
NSString *numberFieldFormat = [numberFormatter stringFromNumber:currency];
numberField.text = numberFieldFormat;

$%1.2fを試しましたが、$記号を数値として認識しないため、クラッシュします。誰かがここで私を助けてくれますか?または、$記号付きのカスタムパッドを作成するためのより良い方法がありますか?

**編集numberFieldを非表示のラベル(アルファ0)にし、コピー(numberField2)を直接上に配置して、stringWithFormatで実行することを検討しています。それは動作しますが、私はそれを行うためのよりクリーンな方法があるかもしれないと思いました。

4

3 に答える 3

6

あなたはそれを見せたくありません$0.00。英国にいる場合はどうなりますか? 表示したくない£0.00ですか?

の使い方を間違っているようですNSNumberFormatter。通貨の数値をフォーマットする方法は次のとおりです。

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterCurrencyStyle];
NSString *string = [f stringFromNumber:[NSNumber numberWithFloat:1234.56]];
[f release];

これにより、ロケールに関係なく、正しくフォーマットされます。正しい通貨記号、正しい桁区切り記号、および正しい小数点記号が使用されます。この機能を自分で再作成しようとするのは悪い考えです。

于 2012-06-04T23:40:33.247 に答える
0

私の理解では、文字列に$を追加したいだけです。あなたはこのようなことをすることができます。

....

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setGrouping Separator:@""];
[numberFormatter setMaximumIntegerDigits:4];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMaximumFractionDigits:2];

NSDecimalNumber *currency = [[NSDecimalNumber decimalNumberWithString:numberField.text]      decimalNumberByDividingBy: [NSDecimalNumber decimalNumberWithString:@"100"]];

NSString *formatted = [[currency stringValue] stringByReplacingOccurrencesOfString:[currency stringValue] withString:[NSString stringWithFormat:@"$%@",[currency stringValue]]];

  NSLog(@"%@", formatted); // Prints $0.00

または私はあなたの質問を誤解していますか?

于 2012-06-04T23:31:55.490 に答える
0

これを試して:

NSString *digit = sender.currentTitle;
numberField.text = [numberField.text stringByAppendingString:digit];

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setGrouping Separator:@""];
[numberFormatter setMaximumIntegerDigits:4];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMaximumFractionDigits:2];

numberField.text = [numberField.text stringByReplacingOccurrencesOfString:@"." withString:@""];
numberField.text = [numberField.text stringByReplacingOccurrencesOfString:@"$" withString:@""];
NSDecimalNumber *currency = [[NSDecimalNumber decimalNumberWithString:numberField.text] decimalNumberByDividingBy: [NSDecimalNumber decimalNumberWithString:@"100"]];
NSString *numberFieldFormat = [numberFormatter stringFromNumber:currency];
numberField.text = [NSString stringWithFormat:@"$%@", numberFieldFormat];
于 2012-06-04T23:09:11.100 に答える