NSDecimalNumber设置和获取值

时间:2012-08-01 18:53:57

标签: ios nsdecimalnumber

我有以下属性:

@property (nonatomic, assign) NSDecimalNumber askingPrice;

我正在尝试从文本字段设置值:

myManager.askingPrice = [self.askingPriceTextField.text doubleValue];

我收到以下警告:

Assigning to 'NSDecimalNumber' from incompatible type 'double'

当我尝试获取类似的值时:

[NSDecimalNumber numberWithDouble:myManager.askingPrice];

我收到错误:

 Sending 'NSDecimalNumber' to parameter of incompatible type 'double'

我以前没有使用过NSDecimalNumber但是已经谷歌并且看到它在处理货币时会被使用。有人可以指出我可以使用的辅助功能,这将允许我做我想做的事情吗?

感谢

2 个答案:

答案 0 :(得分:4)

使用:

myManager.askingPrice = [NSDecimalNumber decimalNumberWithString:self.askingPriceTextField.text]

答案 1 :(得分:2)

askingPrice中的myManager属性是NSDecimalNumber,是一个Cocoa类,它围绕十进制数包装对象。您的askingPriceTextField.text为您提供了NSString,您可以转换为floatdouble

所以基本上你要做的就是在你的文本字段中使用NSDecimalNumber建立一个新的NSString。这是你如何做到的:

double askingPriceDouble = [self.askingPriceTextField.text doubleValue]; // extract a double from your text field
myManager.askingPrice = [[NSDecimalNumber alloc] initWithDouble:askingPriceDouble]; //create an NSDecimalNumber using your previously extracted double

我在这里使用alloc-init方案,因为您将属性设置为assign ed。由于NSDecimalNumber是一个对象(不是double之类的基本类型),因此您需要确保您的要价为retain,以便在您需要之前不会取消分配它。另一种方法是声明你的财产:

@property(nonatomic, retain) NSDecimalNumber *askingPrice; // Do not forget the '*' sign when declaring object properties as pointers.

然后:

double askingPriceDouble = [self.askingPriceTextField.text doubleValue];
myManager.askingPrice = [NSDecimalNumber numberWithDouble:askingPriceDouble];

这样做会有效,因为在设置时,您的askPrice属性将为retain

此外,不要忘记确保您的文本字段的内容实际上可以转换为双...