Cocoa 将字符串转换为浮点

Cocoa 将字符串转换为浮点,cocoa,floating-point,nsstring,Cocoa,Floating Point,Nsstring,我从用户输入中得到一个NSString,它是这样的:$10000.00 我有一种方法可以去除$off: - (NSString*) stripDollarSign : (NSString*) stringToStrip { //check to see if the number is already formatted correctly NSRange dollarSignCheck = [stringToStrip rangeOfString:@"$"]; //o

我从用户输入中得到一个NSString,它是这样的:$10000.00

我有一种方法可以去除$off:

- (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;

}
我的报税表是10000.00(仍然是NSString)

如果我对清理后的结果执行此操作:

float value = [inputString floatValue]
我明白了:

10点

如果我试着把它转换成NSDecimal,我会得到10

[[NSDecimalNumber alloc] initWithString:inputString];

我要怎么做才能转换成10000.00?

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

NSString *stringWithoutComma = [cleanedString stringByReplacingOccurrencesOfString:@"," withString:@""];

您可以使用
NSString
方法
stringByReplacingOccurrencesOfString:with字符串:
删除逗号。例如:

NSString *stringWithoutComma = [cleanedString stringByReplacingOccurrencesOfString:@"," withString:@""];


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);

注意:您可能需要首先在格式化程序上手动设置区域设置-当我在我的位置测试时,它根本不能很好地处理磅符号。

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);

注意:您可能需要首先在格式化程序上手动设置区域设置-当我在我的位置测试它时,它根本不能很好地处理磅符号。

NSNumberFormatter
NSNumberFormatter
:您可能需要将区域设置为类似美国的东西,或者,此解决方案将与OP存在相同的问题。如果明确说明符号、分组分隔符和小数分隔符,则此解决方案似乎可以正常工作。虽然货币符号的位置可能存在问题,但某些地区会将其保留在末尾。但是OP是手动剥离的,所以这不是一个真正的问题。所以我想你是对的!我没想到。NSNumberFormatter API似乎没有对currencySymbol位置的任何引用。您可能必须将区域设置设置为类似于美国的设置,否则此解决方案将与OP有相同的问题。当您明确说明符号、分组分隔符和小数分隔符时,似乎可以正常工作。是,虽然货币符号的位置可能有问题,但有些地区会将其保留在最后。但是OP是手动剥离的,所以这不是一个真正的问题。所以我想你是对的!我没想到。NSNumberFormatter API似乎没有对currencySymbol位置的任何引用。谢谢,请始终忘记数字格式化程序是双向的。谢谢,请始终忘记数字格式化程序是双向的。