0
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter   setNumberStyle: NSNumberFormatterCurrencyStyle];
    double value = [[numberFormatter  numberFromString: ProviderTripRate.text] doubleValue];
    [User setDouble:value forKey:@"Trip_Rate"];
NSLog(@"     %@                  %f     " , ProviderTripRate.text  ,   value  );

如果 ProviderTripRate.text 中的数据为 2.75,则值为 0 错误 如果 ProviderTripRate.text 中的数据为 $2.75,则值为 2.75 正确

您如何可靠地将字符串从字符串转换为双精度值注意文本字符串可能有也可能没有本地货币符号(如上所示的 $),但它应该始终转换

提前致谢

4

3 回答 3

1

尝试这个:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
NSNumber* number = [numberFormatter  numberFromString:ProviderTripRate.text]
if (!number) {
    [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
    number = [numberFormatter  numberFromString:ProviderTripRate.text];
}
double value = [number doubleValue];
于 2012-10-16T17:49:05.387 回答
0

尝试这个:

if ([providerTripRate.text hasPrefix:@"$"]) {
    // use NSNumberFormatter to obtain the value
} else {
    float theValue = [providerTripRate.text doubleValue];
}

等等

于 2012-10-16T17:37:08.263 回答
0
extension String {
/// Creates a Double from the string
///
/// Tries various ways of extracting a number, currently handling the following formats
/// - 1000
/// - 1000.00
/// - 1,000.00
/// - $1,000.00
///
/// - Returns: Double value, or 0.0 if a non numerical String is passed
  func asDouble() -> Double {

    if let double = Double(self) {
        return double
    }

    let formatter = NumberFormatter()
    if let number = formatter.number(from: self) {
        return number.doubleValue
    }

    formatter.numberStyle = .currency
    if let number = formatter.number(from: self) {
        return number.doubleValue
    }

    formatter.currencySymbol = ""
    formatter.internationalCurrencySymbol = ""

    if let number = formatter.number(from: self) {
        return number.doubleValue
    }

    return 0
  }
}
于 2017-06-12T12:31:58.973 回答