相关疑难解决方法(0)

从float或double实例化NSDecimalNumber的正确方法

我正在寻找从double或short实例化NSDecimalNumber的最佳方法.有以下NSNumber类和实例方法......

+NSNumber numberWithFloat
+NSNumber numberWithDouble
-NSNumber initWithFloat
-NSNumber initWithDouble
Run Code Online (Sandbox Code Playgroud)

但这些似乎会返回NSNumber.另一方面,NSDecimalNumber定义以下内容:

+NSDecimalNumber decimalNumberWithMantissa:exponent:isNegative:
+NSDecimalNumber decimalNumberWithDecimal:
Run Code Online (Sandbox Code Playgroud)

这里有几种可能性.如果您将NSDecimalNumber设置为上述NSNumber便捷方法的返回值,则Xcode会生成警告.

希望能以最干净,最正确的方式投入...

iphone cocoa objective-c

38
推荐指数
2
解决办法
3万
查看次数

NSDecimal,NSDecimalNumber,CFNumber之间的正确选择是什么?

我已经阅读了很多关于NSDecimal,NSNumber,NSNumberDecimal,CFNumber ......它开始对我来说是一种丛林.

基本上,我正在尝试创建一个简单的模型类来处理简单的计算,如下所示:

#import <Foundation/Foundation.h>


@interface Test : NSObject
{
    float rate;
    float amount;
    int duration;
}

- (float)capitalizedAmount;

@end

@implementation Test

- (float)capitalizedAmount {
    return (amount*pow((1.0+rate),duration));
}

@end
Run Code Online (Sandbox Code Playgroud)

我想以名字作为字符串来访问这些方法和setter,因为我打算有很多其他类这样的类,我只保留一个字段列表来进行键值编码.

// This is just the desired behavior
// This evidently won't work with the previous class definition
Test *obj = [[Test alloc] init];
[NSNumber numberWithInt:10]
...
float r;
r = [obj performSelector:NSSelectorFromString(@"capitalizedAmount")];
Run Code Online (Sandbox Code Playgroud)

我知道这是不可能的,performSelector:它将返回一个对象,因此它capitalizedAmount应该返回一个对象.我已经阅读NSInvocation了关于comp.lang的Objective-C Faq的相关内容和相关部分.

我也明白我应该使用NSDecimalNumber,但我想知道两件事:

  1. 内存开销和性能损失是否可以接受更复杂的类(仅在UITableView中显示此类财务计算)?我在C中没有太多背景......
  2. 使用像这样的功能不是太过于挑剔和复杂decimalNumberByAdding:吗?使用Python,很容易定义__add__使用运算符和对象.我应该从中获取浮点值NSDecimalNumber …

iphone cocoa objective-c key-value-coding

28
推荐指数
2
解决办法
1万
查看次数

核心数据和iPhone的NSDecimalNumber问题

我对核心数据和iphone编程很新.也许这是一个明显的答案,所以如果有人能指出我的教程或其他资源,我们非常感谢!我有一个十进制类型的核心数据实体,因为它处理货币,我读过的所有内容都说在处理货币时使用NSDecimalNumber.话虽这么说,我不能为我的生活弄清楚如何在插入新对象时设置值.这就是我所拥有的

NSManagedObjectContext *moc = [self.fetchedResultsController managedObjectContext];
Envelope *envelope = [NSEntityDescription insertNewObjectForEntityForName:@"Envelope"
                                                inManagedObjectContext:moc];
[envelope setValue:@"Envelope 1" forKey:@"name"];
NSDecimalNumber *budgetNumber = [NSDecimalNumber decimalNumberWithDecimal:1.00];
[envelope setValue:budgetNumber forKey:@"budget"];
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?提前致谢!

iphone core-data nsdecimalnumber

5
推荐指数
1
解决办法
3289
查看次数