2013-05-13 50 views
0

我收到来自用户输入一个的NSString是来找我的是这样的:$ 10,000.00转换的NSString浮动

我有剥去$关闭的方法:

- (NSString*) stripDollarSign : (NSString*) stringToStrip { 

    //check to see if the number is already formatted correctly 
    NSRange dollarSignCheck = [stringToStrip rangeOfString:@"$"]; 
    //only strip it if it has the $ 
    if (dollarSignCheck.location != NSNotFound) { 

     NSString* cleanedString = [stringToStrip substringWithRange:NSMakeRange(1, stringToStrip.length-1)]; 
     return cleanedString; 
    } 

    return 0; 

} 

,我的回报10,000.00(仍然是NSString)。

如果我这样做与清洗结果:

float value = [inputString floatValue] 

我得到这个:

10.00

如果我尝试将其转换为NSDecimal我得到10

[[NSDecimalNumber alloc] initWithString:inputString]; 

我需要做些什么来转换这个,所以我得到10,000.00?

+3

'NSNumberFormatter':http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSNumberFormatter_Class/Reference/Reference.html – 2013-05-13 15:14:44

回答

2

NSNumberFormatter似乎起初像前进的好方法:

NSString *currencyAmount = @"$10,000.00"; 
    NSLocale *englishLocale = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US"]; 
    NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init]; 
    currencyFormatter.numberStyle = NSNumberFormatterCurrencyStyle; 
    currencyFormatter.locale = englishLocale; 
    NSNumber *number = [currencyFormatter numberFromString: currencyAmount]; 
    NSLog(@"Got amount: %@", number); 

注意您可能需要手动设置语言环境的格式化首先 - 当我在我的位置进行测试时,它并没有很好地处理英镑符号。

+0

谢谢,总是忘记数字格式化程序是一条双向的街道。 – PruitIgoe 2013-05-13 15:53:41

0

您可以使用NSString方法stringByReplacingOccurrencesOfString:withString:删除逗号。例如:

NSString *stringWithoutComma = [cleanedString stringByReplacingOccurrencesOfString:@"," withString:@""]; 
2
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[formatter setCurrencySymbol:@"$"]; 
[formatter setCurrencyGroupingSeparator:@","]; 
[formatter setCurrencyDecimalSeparator:@"."]; 

NSNumber *n = [formatter numberFromString:@"$10,000.00"]; 

OR

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setPositiveFormat:@"$###,###.##"]; 
[formatter setLenient:YES]; // This will forgive you for missing out the $ symbol 
+1

您可能必须将语言环境设置为类似美国的东西,或者这个解决方案与OP有相同的问题。 – Monolo 2013-05-13 15:35:35

+1

当您明确了符号,分组分隔符和小数点分隔符时,似乎工作正常。 – 2013-05-13 15:39:23

+0

的确,虽然货币符号的位置可能存在问题,但某些区域设置会将其保留在最后。但OP将其手动删除,所以这不是一个真正的问题。所以我想你是对的! – Monolo 2013-05-13 15:45:23