【问题标题】:How convert a formated nsstring to NSNumber or just remove the format?如何将格式化的 nsstring 转换为 NSNumber 或删除格式?
【发布时间】:2012-09-26 10:28:19
【问题描述】:

我有一个类似“1.23,45”的字符串,(德国/法国风格或其他风格)。 如何将格式删除为普通字符串或 nsnumber? 我只知道从数字转换为字符串。:( 谢谢。

【问题讨论】:

    标签: iphone ios xcode ipad


    【解决方案1】:
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];  
        [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
        [formatter setCurrencySymbol:@""];  
    
        NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
        [formatter setLocale:locale];
        NSString *formattedOutput = [formatter stringFromNumber:[NSNumber numberWithFloat:[aPrice floatValue]]];
        [locale release];
        [formatter release];
        NSLog(@"%@", formattedOutput];
    

    进一步将formattedString转换为数字

    NSNumber myNumber = [formattedOutput intValue]; //replace intValue by floatValue to get decimal output
    

    【讨论】:

      【解决方案2】:

      您可以使用NSNumberFormatter 将NSString 转换为NSNumber,但您必须告诉它您为字符串使用的语言环境(在这种情况下为德语):

      // Create a number formatter that can convert from/to German currency:
      NSNumberFormatter *formatter    = [[NSNumberFormatter alloc] init];
      formatter.numberStyle           = NSNumberFormatterCurrencyStyle;
      formatter.locale                = [[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"];
      [formatter setLenient:YES];
      
      // Use the number formatter to create a NSNumber:
      NSNumber *number                = [formatter numberFromString:@"1.23,45"];
      
      // Return the number formatter to the current user's locale:
      formatter.locale                = [NSLocale currentLocale];
      
      // Finally, create a string from the NSNumber formatted in the user's locale:
      NSString *formattedString       = [formatter stringFromNumber:number];
      

      【讨论】:

        【解决方案3】:
          NSNumber * myNumber  = [NSNumber numberWithInt:[@"1.23,45" intValue]];
        

        或

          NSNumber * myNumber  = [NSNumber numberWithFloat:[@"1.23,45" floatValue]];
        

        注意:最好去掉字符串中的逗号(,)符号

        您可以使用以下方法

        + (NSNumber *)numberWithChar:(char)value;
        + (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
        + (NSNumber *)numberWithShort:(short)value;
        + (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
        + (NSNumber *)numberWithInt:(int)value;
        + (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
        + (NSNumber *)numberWithLong:(long)value;
        + (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
        + (NSNumber *)numberWithLongLong:(long long)value;
        + (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
        + (NSNumber *)numberWithFloat:(float)value;
        + (NSNumber *)numberWithDouble:(double)value;
        + (NSNumber *)numberWithBool:(BOOL)value;
        + (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0);
        + (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0);
        

        【讨论】:

        • 嗨 Ramshad,我试过这个,但它不起作用,它返回 nil。我认为它不知道逗号
        【解决方案4】:

        听起来你需要做两件事:

        1) 根据逗号分隔将字符串分解为子字符串数组

        NSString *startString = @"1.23,45";
        NSArray *subStringArray= [colorStr componentsSeparatedByString:@","];
        

        2) 将每个子字符串转换为数字

        NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init];
        [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
        NSString *subString = [subStringArray objectAtIndex:0];
        NSNumber *thisNumber = [formatter numberFromString:subString];
        NSLog (@"thisNumber: %@", thisNumber);
        

        【讨论】:

          猜你喜欢
          • 2023-04-08
          • 1970-01-01
          • 2012-03-31
          • 2011-04-27
          • 2010-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多