【问题标题】:How to create an NSMutableArray of floating point values如何创建浮点值的 NSMutableArray
【发布时间】:2010-10-04 09:01:15
【问题描述】:

我是 Objective-C 和 iPhone 开发的新手,我正在尝试将浮点值存储在 NSMutableArray 中,但是当我这样做时,我收到一条错误消息,提示“'addObject 的参数 1 的类型不兼容”。我究竟做错了什么?我正在尝试创建一个可以用来执行数学计算的双精度数组。

【问题讨论】:

    标签: iphone objective-c arrays double


    【解决方案1】:

    使用 NSNumber 来包装你的浮点数,因为字典需要一个对象:

    [myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
    /* or */
    [myDictionary setObject:@0.2f forKey:@"theFloat"];
    

    通过发送 floatValue 检索它:

    float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
    

    代码未经测试。

    您也可以在 NSNumber 中包装许多其他数据类型,请查看documentation。 NSPoint 和 NSRect 等结构也有 NSValue

    【讨论】:

      【解决方案2】:
      NSMutableArray *muArray = [[NSMutableArray alloc] init];
      NSNumber *float = [NSNumber numberWithFloat:210.0f];
      NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
      [muArray addObject:float];
      [muArray addObject:float1];
      
      NSlog(@"my array is--%@",muArray);
      

      【讨论】:

      • 请解释一下你的答案
      【解决方案3】:

      NSMutableArray 仅保存对象,因此您希望使用 NSNumber 对象加载数组。 创建每个 NSNumber 来保存你的双精度然后将它添加到你的数组中。也许是这样的。

      NSMutableArray *array = [[NSMutableArray alloc] init];
      NSNumber *num = [NSNumber numberWithFloat:10.0f];
      [array addObject:num];
      

      根据需要重复。

      【讨论】:

      • 如果不需要精度,请使用 numberWithFloat。
      【解决方案4】:

      在 Cocoa 中,NSMutableDictionary(以及所有的集合,真的)需要对象作为值,因此您不能简单地传递任何其他数据类型。正如 sjmulder 和 Ryan 建议的那样,您可以将标量值包装在 NSNumber(用于数字)和 NSValue 用于其他对象的实例中。

      如果您代表十进制数字,例如价格,我建议您也查看并使用NSDecimalNumber。然后,您可以避免浮点不准确问题,并且通常可以将“值”作为NSDecimalNumber 使用和存储,而不是用代码中的原语表示。

      例如:

      // somewhere
      NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
      NSMutableArray*  prices= [[NSMutableArray array] retain];
      
      // ...
      
      [prices addObject:price];
      

      【讨论】:

        猜你喜欢
        • 2012-01-14
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多