使用NSDecimalNumber作为自定义类的属性的正确方法

时间:2013-08-08 03:01:35

标签: ios nsnumber nsdecimalnumber

目前,我正在从Web服务中提取数据并将数据填充到自定义对象中。

我正在存储小数,例如4.56等。

我对NSDecimal和NSDecimalNumber感到有些困惑。我已经读过在处理钱时应该使用NSDecimalNumber,我就是这样。所以问题是我的属性是否应该是NSDecimal或NSDecimalNumber。我已经读过你的模型是NSDecimal的情况,并且你会使用NSDecimalNumber进行任何带数字的算术。

我基本上想在ObjectiveC

中创建类似的行为
private decimal thirtyYear;

public decimal getThirtyYear(){
    return thirtyYear/100.0;
}

public void setThrityYear(decimal rate){
    thirtyYear = rate;
}

那么,我的threeYear属性应该是NSDecimal还是NSDecimalNumber。另外,在getThirtyYear()方法中进行除法时,我应该使用NSDecimalNumber进行算术运算。

1 个答案:

答案 0 :(得分:0)

问题#1 :我的30年属性应该是NSDecimal还是NSDecimalNumber?

正如您所述,如果您正在处理任何财务计算,请始终使用NSDecimalNumber,并且NSDecimalNumber在执行基数10计算时提供可预测的舍入行为和精度。

如果您需要更详细的信息,请直接从Apple文档中获取:

  

NSDecimalNumber是NSNumber的一个不可变子类,它提供了一个   用于执行base-10算术的面向对象的包装器。一个实例可以   表示可以表示为尾数x 10指数的任何数字   其中尾数是一个十进制整数,最长为38位,指数   是-128到127之间的整数。

现在关于NSDecimal,这是一个C结构,并不像在Objective C中那样容易使用。如上所述,NSDecimalNumber对象可以用于面向对象语言。简而言之,NSDecimalNumber是要走的路。它更容易使用。

问题#2 :在getThirtyYear()方法中划分时,我应该使用NSDecimalNumber进行算术运算吗?

如果精确计算在您的应用程序中至关重要,则使用NSDecimalNumber,因为它们保证准确。

由于您将使用NSDecimalNumber,我建议您查看NSDecimalNumber Class Reference,因为该类有一个有用方法的数字(没有双关语)。希望这会有所帮助。

相关问题