我有一个名为realEstateWorth的字符串,其值为$ 12,000,000。 我需要这个相同的字符串来保持字符串,但任何数字(例如上面的那个)都要显示为1200万美元或600万美元。关键是它需要在数字之后加上“MILLION”字样。
我知道有nsNumberFormatter可以将字符串转换为数字,反之亦然,但它可以做我需要的吗?
如果有任何想法或建议,我们将不胜感激。
谢谢!
答案 0 :(得分:5)
所以我看到它,你有两个问题:
所以,问题#1:
要将字符串转换为数字,请使用NSNumberFormatter
。你有一个非常简单的案例:
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *n = [f numberFromString:@"$12,000,000"];
// n is 12000000
这很简单!现在问题#2:
这比较棘手,因为你想要一种混合的拼写风格。您可以考虑再次使用NSNumberFormatter
,但这不太正确:
[f setNumberStyle:NSNumberFormatterSpellOutStyle];
NSString *s = [f stringFromNumber:n];
// s is "twelve million"
所以,我们离得更近了。在这一点上,你或许可以做类似的事情:
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
}
}
我不知道除英语之外的其他方面有多好。 CAVEAT IMPLEMENTOR
答案 1 :(得分:1)
最糟糕的情况是,您可以在category
上实施NSString
来实施您想要的行为。
在你将category
中执行的方法中,你可以使用NSNumberFormatter将该字符串带入一个数字,并通过做一些模运算,你可以定义你是否需要单词Million,或Billion等,然后放回去一个字符串,其中包含Million的模数或您需要的其他方式。
这样你就可以在你的NSString上调用这个方法,如下所示:
NSString *humanReadable = [realEstateWorth myCustomMethodFromMyCategory];
还有。
NSString are immutable
,因此除非您为变量指定一个新变种,否则无法更改它。
答案 2 :(得分:1)
我建议将此值存储为NSNumber或float。然后你可以有一个生成NSString的方法来显示它:
- (NSString*)numberToCurrencyString:(float)num
{
NSString *postfix = @"";
if (num > 1000000000)
{
num = num / 1000000000;
postfix = @" Billion";
}
else if (num > 1000000)
{
num = num / 1000000;
postfix = @" Million";
}
NSString *currencyString = [NSString stringWithFormat:@"%.0f%@", num, postfix];
return currencyString;
}
注意:您的问题表明您的输入需要保留为字符串。没关系。因此,您需要1.)首先解析字符串中的数字,然后2.)然后将其重新转换为数字中的字符串。我已经展示了如何完成这个过程的第2步。