如何将NSDecimalNumber除以整数?

时间:2013-12-04 11:12:47

标签: ios cocoa

我认为这里不存在对此的全面,基本的答案,谷歌搜索没有帮助。

任务:给定NSDecimalNumber除以int并返回另一个NSDecimalNumber澄清:下面的amount_text必须转换为NSDecimalNumber,因为它是一种货币。结果必须是NSDecimalNumber,但我不关心除数的格式。

到目前为止我所拥有的:

// Inputs
NSString *amount_text = @"15.3";
int n = 10;

NSDecimalNumber *total = [NSDecimalNumber decimalNumberWithString:amount_text]; 

// Take int, convert to string. Take string, convert  to NSDecimalNumber.
NSString *int_string = [NSString stringWithFormat:@"%d", n];
NSDecimalNumber *divisor = [NSDecimalNumber decimalNumberWithString:int_string];
NSDecimalNumber *contribution = [total decimalNumberByDividingBy:divisor];

当然,这可以通过更简单的方式完成吗?

4 个答案:

答案 0 :(得分:5)

你有没有理由使用NSDecimalNumber?这样做可以更简单:

// Inputs
NSString *amount_text = @"15.3";
int n = 10;

float amount = [amount_text floatValue];
float result = amount / n;

如果你真的想用NSDecimalNumber

这样做
// Inputs
NSString *amount_text = @"15.3";
int n = 10;

NSDecimalNumber *total = [NSDecimalNumber decimalNumberWithString:amount_text];
NSDecimalNumber *divisor = [NSDecimalNumber decimalNumberWithMantissa:n exponent:0 isNegative:NO];
NSDecimalNumber *contribution = [total decimalNumberByDividingBy:divisor];

答案 1 :(得分:4)

创建NSDecimalNumber时始终可以使用初始化程序。由于它是NSNumber的子类,因此NSDecimalNumber会覆盖初始化程序。

所以你可以做到

NSDecimalNumber *decimalNumber = [[NSDecimalNumber alloc] initWithInt:10];

但是,如果您正在进行高精度计算,则应该小心,因为使用这些初始化程序时存在一些问题。您可以更详细地了解它here

答案 2 :(得分:1)

根据您的代码......

您正在从字符串创建NSDecimalNumber,然后使用它进行操作。

我从不这样做。除非你需要一个盒装的Objective-C对象,否则你需要NSDecimalNumber,避免使用它,使用float和double。


如果你想做得更简单,你可以这样做:

float quotient = [total floatValue]/n;

,或者

float quotient = [contribution floatValue]/n;

编辑:如果您想以任何特定原因使用盒装类型,那么您可以使用:

NSString *amount_text = @"15.3";
int n = 10;

NSDecimalNumber *total = [NSDecimalNumber decimalNumberWithString:amount_text];
NSDecimalNumber *divisor = [[NSDecimalNumber alloc] initWithInt:n];
NSDecimalNumber *contribution = [total decimalNumberByDividingBy:divisor];

答案 3 :(得分:0)

或者(可能会失去一些精确度):

double amount = 15.3;
double n = 10.0;
double contribution = amount / n;

// conversion to decimal
NSString *string = [NSString stringWithFormat:@"%f", n];
NSDecimalNumber *contribution_dec = [NSDecimalNumber decimalNumberWithString:string];

更好(如果n = 10):

[dec decimalNumberByMultiplyingByPowerOf10:-1];