0

私のアプリには、金額フィールドがあります。小数点の前は 6 桁、小数点以下は 2 桁に丸められる任意の桁数のみを受け入れる必要があります。これを行う方法。?

たとえば、12345678 と入力すると、RETURN キーをクリックすると 123456 に切り捨てられます。
同様に、
12345678.75 -> 123456
123456.456 -> 123456.46

4

3 に答える 3

3

このコードは役に立ちます。

double input = 12345678.75;
double output;
NSString *string = [NSString stringWithFormat:@"%lf", input];
int dotPosition = [string rangeOfString:@"."].location;
if(dotPosition == NSNotFound || dotPosition > 6)
{
    output = [string substringToIndex:6].doubleValue;
}
else
{
    output = round(input * 100) / 100;
}

iPhoneDev のコメントによる UPD:

コードの前の部分は double 値を受け取って返します。

文字列を扱うコードは次のとおりです。

NSString * input = @"123456.754";
NSString * output;
int dotPosition = [input rangeOfString:@"."].location;
if(dotPosition == NSNotFound || dotPosition > 6)
{
    output = [input substringToIndex:6];
}
else
{
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.decimalSeparator = @".";
    [formatter setRoundingMode: NSNumberFormatterRoundHalfUp];
    [formatter setMaximumFractionDigits:2];
    output = [formatter stringFromNumber:@(input.doubleValue)];
}
于 2013-09-18T07:06:23.493 に答える
1

このコードを使用

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSString* proposedString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    //if there is empty string return YES
    if([proposedString length] == 0) {
        return YES;
    }

    //create inverted set for appripriate symbols
    NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789.,"] invertedSet];

    //if side symbols is trimmed by nonNumberSet - return NO
    if([proposedString stringByTrimmingCharactersInSet:nonNumberSet].length != [proposedString length]) {
        return NO;
    }

    if([[proposedString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"."]] count] > 2) {

        return NO;
    }

    //finally check is ok, return YES
    return YES;
}


- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    NSArray *components = [textField.text componentsSeparatedByString:@"."];

    // Below 6 & 2 are the range
    NSString *leftString;
    if ([[components objectAtIndex:0] length] > 6) {
        leftString = [[components objectAtIndex:0] substringToIndex:6];
    }
    NSString *rightString;
    if ([[components objectAtIndex:1] length] > 2) {
        rightString = [[components objectAtIndex:1] substringToIndex:2];
    }

    [textField setText:[NSString stringWithFormat:@"%@.%@",leftString,rightString]];

    [textField resignFirstResponder];
    return YES;
}
于 2013-09-18T07:10:53.840 に答える