将字符串解析为不同类型的数字字符串

Ted*_*y13 0 xcode objective-c nsnumberformatter ios

我有一个名为realEstateWorth的字符串,其值为$ 12,000,000.我需要这个相同的字符串来保持字符串,但任何数字(例如上面的那个)都要显示为1200万美元或600万美元.关键是它需要在数字之后加上"百万"字样.

我知道有nsNumberFormatter可以将字符串转换为数字,反之亦然,但它可以做我需要的吗?

如果有人有任何想法或建议,将不胜感激.

谢谢!

Dav*_*ong 5

所以我看到它,你有两个问题:

  1. 你有一个实际上是数字的字符串表示
  2. 您(可能)有一个要格式化为字符串的数字

所以,问题#1:

要将字符串转换为数字,请使用NSNumberFormatter.你有一个非常简单的案例:

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *n = [f numberFromString:@"$12,000,000"];
// n is 12000000
Run Code Online (Sandbox Code Playgroud)

那很简单!现在问题#2:

这比较棘手,因为你想要一种混合的拼写风格.您可以考虑NSNumberFormatter再次使用,但它不太正确:

[f setNumberStyle:NSNumberFormatterSpellOutStyle];
NSString *s = [f stringFromNumber:n];
// s is "twelve million"
Run Code Online (Sandbox Code Playgroud)

所以,我们更接近了.在这一点上,你或许可以这样做:

NSInteger numberOfMillions = [n integerValue] / 1000000;
if (numberOfMillions > 0) {
  NSNumber *millions = [NSNumber numberWithInteger:numberOfMillions];
  NSString *numberOfMillionsString = [f stringFromNumber:millions]; // "twelve"

  [f setNumberStyle:NSNumberFormatterCurrencyStyle];
  NSString *formattedMillions = [f stringFromNumber:millions]; // "$12.00"

  if ([s hasPrefix:numberOfMillionsString]) {
    // replace "twelve" with "$12.00"
    s = [s stringByReplacingCharactersInRange:NSMakeRange(0, [numberOfMillionsString length]) withString:formattedMillions];

    // if this all works, s should be "$12.00 million"
    // you can use the -setMaximumFractionDigits: method on NSNumberFormatter to fiddle with the ".00" bit
  }
}
Run Code Online (Sandbox Code Playgroud)

然而

我不知道这对英语以外的其他方面有多好. CAVEAT IMPLEMENTOR