4

数値を。でフォーマットする必要がありますNSNumberFormatter。数値が小さい場合(例0.000001)、10進形式で表示されます0.000001。数値が大きい場合、多くの小数または整数(Eg1211345456または0.000000011111553242)が科学的記数法で表示されます1.211 E9

私はこのコードを持っていますが(非常に悪いです)、私には十分ではありません:(。解決策はパターンと-setPositiveFormatフォーマットパターンであると思います、#,##0.0000000そして0.###E+0、何かアイデアはありますか?

NSNumberFormatter *formato = [[NSNumberFormatter alloc] init];
    [formato setNumberStyle:NSNumberFormatterDecimalStyle];
    [formato setPositiveFormat:@"#,##0.0000000"];   
    [formato setNegativeFormat:@"-#,##0.0000000"];
    [formato setMaximumFractionDigits:7];
    [formato setMinimumFractionDigits:0];
    [formato setRoundingMode: NSNumberFormatterRoundHalfDown];

    NSString *numero = [formato stringFromNumber:[NSNumber numberWithDouble:valor]];

    //si vale después de formatear y el valor inicial es distinto de 0 se va de rango,
    //por lo tanto usamos notación científica
    if([numero isEqualToString:@"0"] && valor != 0){
        //inicializamos el objeto de nuevo para que no de problemas con setPositiveFormat
        [formato release];
        formato = [[NSNumberFormatter alloc] init];
        [formato setNumberStyle:NSNumberFormatterScientificStyle];
        [formato setMaximumFractionDigits:4];
        [formato setRoundingMode: NSNumberFormatterRoundHalfDown];
        [formato setExponentSymbol:@"e"];
        numero = [formato stringFromNumber:[NSNumber numberWithDouble:valor]] ;
    }

    [formato release];
4

2 に答える 2

3

投稿する前に番号をテストし、サイズに応じて番号を変更することができます。

if (fabs(number)>10e7 || fabs(number)<10e-7) {
    [self.formatter setNumberStyle:NSNumberFormatterScientificStyle]; 
}
else
    [self.formatter setNumberStyle:NSNumberFormatterDecimalStyle];
于 2012-03-23T20:49:25.810 に答える
0

以下のコードは私のために働いています。

- (NSString *)checkAndConvertNumberFormat:(NSString *)numString {
    NSRange range = [numString rangeOfString:@" "];

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [formatter setPositiveFormat:@"#,##0.0000000"];
    [formatter setNegativeFormat:@"-#,##0.0000000"];
    [formatter setMaximumFractionDigits:7];
    [formatter setMinimumFractionDigits:0];
    [formatter setRoundingMode: NSNumberFormatterRoundHalfDown];


    NSNumber *numberFromString;

    if (range.location == NSNotFound) {

        range = [numString rangeOfString:@","];
        if (([numString length]-range.location) == DECIMAL_POSITION) {

            NSLog(@"Comma notation");

            [formatter setGroupingSeparator:@"."];
            [formatter setDecimalSeparator:@","];
        }

        NSLog(@"%d", [numString length]-range.location);

        range = [numString rangeOfString:@"."];
        if (([numString length]-range.location) == DECIMAL_POSITION) {

            NSLog(@"Dot notation");

            [formatter setGroupingSeparator:@","];
            [formatter setDecimalSeparator:@"."];

            numberFromString = [formatter numberFromString:numString];
        }

        NSLog(@"%d", [numString length]-range.location);


    } else {

        NSLog(@"Space Notation");

        [formatter setGroupingSeparator:@" "];
        [formatter setDecimalSeparator:@","];
        numberFromString = [formatter numberFromString:numString];
    }

    numberFromString = [formatter numberFromString:numString];

    [formatter setGroupingSeparator:@""]; // Whatever you want here
    [formatter setDecimalSeparator:@"."]; // Whatever you want here

    return [formatter stringFromNumber:numberFromString];
}
于 2013-12-11T13:53:25.387 に答える