3

54 が 0.54 に変換されるように、通貨の形式で入力を取得していますが、100 を入力しようとすると、0.1 しか出力されません0。として値を入力することはできません100.00。私が使用しているコードは

 (BOOL)textField:(UITextField *)transactionAmount shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{

    NSString *substring = transactionAmount.text;
    substring = [substring stringByAppendingString:string];
    NSLog(@"Text : %@",substring);

    NSString *cleanCentString = [[transactionAmount.text
                                  componentsSeparatedByCharactersInSet:
                                  [[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
                                 componentsJoinedByString:@""];
    // Parse final integer value
    NSInteger centAmount = cleanCentString.integerValue;
    // Check the user input
    if (string.length > 0)
    {
        // Digit added
        centAmount = centAmount * 10 + string.integerValue;
    }
    else
    {
        // Digit deleted
        centAmount = centAmount / 10;
    }
    // Update call amount value
    NSNumber *amount = [[NSNumber alloc] initWithFloat:(float)centAmount / 100.0f];
    // Write amount with currency symbols to the textfield
    NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
    // [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [_currencyFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [_currencyFormatter setCurrencyCode:@"USD"];
    [_currencyFormatter setNegativeFormat:@"-¤#,##0.00"];
    self.transactionAmount.text = [_currencyFormatter stringFromNumber:amount];
  //  [self SetMainMessage:customTipsValue.text];


    return NO;
}
4

2 に答える 2

1

最初の「文字列クリーニング」のほとんどが間違っており、数値フォーマッタが正しくありません。次のようになります。

- (BOOL)textField:(UITextField *)transactionAmount shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *substring = transactionAmount.text;
    substring = [substring stringByReplacingCharactersInRange:range withString:string];
    NSLog(@"New Text : %@",substring);

    NSString *cleanCentString = [[substring
                              componentsSeparatedByCharactersInSet:
                              [[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
                             componentsJoinedByString:@""];

    // Parse final integer value
    NSInteger centAmount = cleanCentString.integerValue;

    // Update call amount value
    NSNumber *amount = [[NSNumber alloc] initWithFloat:centAmount / 100.0f];

    // NOTE: make this an instance variable and set it up just once
    // Write amount with currency symbols to the textfield
    NSNumberFormatter *_currencyFormatter = [[NSNumberFormatter alloc] init];
    [_currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [_currencyFormatter setCurrencyCode:@"USD"];
    [_currencyFormatter setNegativeFormat:@"-¤#,##0.00"];

    self.transactionAmount.text = [_currencyFormatter stringFromNumber:amount];

    return NO;
}

何らかの理由で、通貨形式ではなく小数形式を使用する場合は、小数部の最小桁数と最大桁数 (小数点以下の桁数) を 2 に設定してください。

USD をハードコーディングしますか? 他の国でアプリを使用している人はどうですか?

元の文字列のクリーニングは、切り取り、コピー、または貼り付けを使用するユーザーを適切にサポートしていませんでした。また、作成するテキストが間違っていましたcleanCentString

于 2012-12-08T17:08:57.963 に答える
1

私が理解したのは

入力値が 0 の場合は、0 が必要です。

入力値が 1 ~ 99 の場合、0.01 ~ 0.99 が必要です。

入力値が 1 以上の場合は、同様に 1.00 が必要です。

なぜあなたはまっすぐにならないのですかfloat requiredCurrency=inputCurrency/100.0f;

于 2012-12-08T12:20:59.687 に答える