Итак, на мой взгляд, у вас есть две проблемы:
- У вас есть строковое представление чего-то, что на самом деле является числом
- У вас (потенциально) есть нужное вам числоотформатированный как строка
Итак, задача № 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