【问题标题】:String to float in objective c在目标 c 中浮动的字符串
【发布时间】:2011-01-28 17:26:19
【问题描述】:

我有一个解析器返回一些字符串值,我想将其用作类实例初始化的参数。

我有一个方法询问两个 NSString 和一个浮点值,但我无法将字符串转换为浮点数,这是我的代码:

 NSString *from = [[NSString alloc] initWithString:@"EUR"];
    NSString *to = [[NSString alloc] initWithString:[attributeDict objectForKey:@"currency"]];
    NSNumber *rate = [[NSNumber alloc] initWithFloat:[[attributeDict objectForKey:@"rate"] doubleValue]];


   currency = [[Currency init] alloc];
   [currency addCurrencyWithFrom:from andTo:to andRate:rate];

在.h

- (id) addCurrencyWithFrom: (NSString *) from_ andTo:(NSString *) to_ andRate:(float *) float_;

【问题讨论】:

  • but I can't convert the string to float - 你的意思是这里的字符串是 NSString 还是 C 字符串?
  • 附带说明,如果您正在做货币转换器,您可能有兴趣查看:github.com/davedelong/DDUnitConverter 它有一个从 IMF 提取数据的货币转换器。
  • 还请注意,在使用货币做任何事情时,您真的很想避免浮动。浮点数在无法准确表示或计算相对较小的值方面非常出色。双打明显更好。

标签: objective-c nsstring floating-point nsnumber


【解决方案1】:

不不不不不不不不不。

使用NSNumberFormatter。 这就是它存在的原因。 -floatValue 和 -doubleValue 只是快速简单的临时修复,但它们以糟糕的方式失败。例如:

NSLog(@"%f", [@"123" floatValue]); //logs 123.0000
NSLog(@"%f", [@"abc" floatValue]); //logs 0.0000
NSLog(@"%f", [@"0" floatValue]);   //logs 0.0000
NSLog(@"%f", [@"42" floatValue]);  //logs 42.0000
NSLog(@"%f", [@"42x" floatValue]); //logs 42.0000

-floatValue 无法区分正确的数字 (@"0") 和无效的数字 (@"abc")。

另一方面,如果NSNumberFormatter 无法解析它,它会给你nil,如果它可以解析它,它会给你一个NSNumber。它还考虑了货币符号、特定区域的小数和千位分隔符以及用户的区域设置等内容。 -floatValue 和朋友没有。

有关更多信息,请参阅此相关问题:How to convert an NSString into an NSNumber

【讨论】:

  • 呵呵,你又回答了我脑海中浮现的另一个问题。
【解决方案2】:
float f = [yourStringObject floatValue];

【讨论】:

    【解决方案3】:

    试试:

    double f = [from_ doubleValue];
    double t = [to_ doubleValue];
    

    此外,传递 NSNumber* 而不是浮点数不会给您预期的结果。

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 2012-12-19
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      相关资源
      最近更新 更多