我有一个名为 realEstateWorth 的字符串,其价值为 12,000,000 美元。我需要这个相同的字符串来保持字符串,但任何数字(例如上面的那个)都显示为 $1200 万或 $600 万。关键是它需要在数字后面加上“百万”字样。
我知道有 nsNumberFormatter 可以将字符串转换为数字,反之亦然,但它可以满足我的需要吗?
如果有人有任何想法或建议,将不胜感激。
谢谢!
我有一个名为 realEstateWorth 的字符串,其价值为 12,000,000 美元。我需要这个相同的字符串来保持字符串,但任何数字(例如上面的那个)都显示为 $1200 万或 $600 万。关键是它需要在数字后面加上“百万”字样。
我知道有 nsNumberFormatter 可以将字符串转换为数字,反之亦然,但它可以满足我的需要吗?
如果有人有任何想法或建议,将不胜感激。
谢谢!
所以在我看来,你有两个问题:
所以,问题#1:
要将字符串转换为数字,请使用NSNumberFormatter
. 你有一个非常简单的案例:
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *n = [f numberFromString:@"$12,000,000"];
// n is 12000000
那很简单!现在问题#2:
这比较棘手,因为您需要混合拼写样式。您可以考虑NSNumberFormatter
再次使用 an ,但这并不完全正确:
[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
}
}
我不知道这在英语以外的任何地方都能奏效。 警告执行者
在最坏的情况下,您可以实现一个category
onNSString
来实现您想要的行为。
在您将执行的方法中,category
您可以使用 NSNumberFormatter 将该字符串带入一个数字,并通过执行一些模运算,您可以定义是否需要单词 Million 或 Billion 等,然后用模数放回字符串百万或您需要的其他方式。
这样你就可以像这样在你的 NSString 上调用该方法:
NSString *humanReadable = [realEstateWorth myCustomMethodFromMyCategory];
并且。
NSString are immutable
,所以你不能改变它,除非你给你的变量分配一个新的。
我建议将此值存储为 NSNumber 或浮点数。然后你可以有一个方法来生成一个 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 步。