HowTo for newbie:在iPhone应用程序中管理货币

时间:2009-01-09 01:47:54

标签: iphone objective-c

我正在构建一个需要管理money数据类型的应用。

我是Obj-c的新手,因此我无法看到使用NSDecimalNumber时的光线。

例如,在我的单元测试中,我这样做:

@interface SamplePerson : NSObject {
    NSString *name;
    NSDate *birthDate;
    NSInteger size;
    NSNumber *phone;
    NSDecimal balance;
    BOOL *isOk;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSDate *birthDate;
@property (nonatomic) NSInteger size;
@property (nonatomic, retain) NSNumber *phone;
@property (nonatomic) NSDecimal balance;
@property (nonatomic) BOOL *isOk;
--    
o.balance = [NSDecimalNumber decimalNumberWithDecimal: [[NSNumber numberWithLong: 12.5] decimalValue]];

但是要收到警告:

  

警告:从不同的Objective-C类型

传递'save:'的参数1

总而言之,我认为这个问题比预期更复杂。我可以破解使用整数,但我在Foxpro,Delphi,.NET,Python的10多年编程中从未这样做过......从来没有做过这类工作的问题。

无论如何,我想知道这是怎么回事。我在网上阅读,但只发现了与上面相同的代码和“使用NSDecimalNumber或被杀!”等信息。

我想知道如何:

  • 确定简单值,例如12.5
  • 简单数学
  • 如何存储&从sqlite加载。

谢谢。

(顺便说一句:存在一个解决这个问题的库或实用程序?这听起来像是一个常见的头疼,严厉吗?)

2 个答案:

答案 0 :(得分:3)

您收到该警告的原因是您将平衡声明为原始NSDecimal,而不是NSDecimalNumber *。请查看this question,了解为什么要使用NSDecimalNumber。

答案 1 :(得分:1)

也是12.5不长,所以你不能使用

[NSNumber numberWithLong: 12.5]