同时乘以3个NSDecimalNumber

时间:2012-03-06 16:14:07

标签: iphone objective-c ios xcode nsdecimalnumber

首先,我正在使用NSDecimalNumbers,因为我正在处理货币问题。我对十进制数字本身没有任何问题,我想知道是否可以同时乘以3个NSDecimalNumber(s)。

换句话说,如果我乘以3个整数,我会简单地说:

int a = 2;
int b = 5;
int c = 7;

int x = a * b * c;

但是,为了使NSDecimalNumbers成倍增加,您必须使用decimalNumberByMultiplyingBy method

使用这种方法,我必须进行2次计算才能乘以我正在处理的3个NSDecimalNumbers,如下所示:

NSDecimalNumber *d1 = [NSDecimalNumber decimalNumberWithString:@"1.502"];
NSDecimalNumber *d2 = [NSDecimalNumber decimalNumberWithString:@"12.472"];
NSDecimalNumber *d3 = [NSDecimalNumber decimalNumberWithString:@"0.765"];

//Calculation
NSDecimalNumber *initialValue = [d1 decimalNumberByMultiplyingBy:d2];
NSDecimalNumber *finalValue = [initialValue decimalNumberByMultiplyingBy:d3];

//Formatting
NSString *output = [NSString stringWithFormat:@"%@", finalValue];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:output];

//r is my NSNumberFormatter, which I've configured elsewhere
NSString *s = [r stringFromNumber:n];

NSLog(@"%@",s);

有没有办法同时将所有3个NSDecimalNumbers乘以而不是这种笨重的方式呢?

3 个答案:

答案 0 :(得分:8)

答案不是。乘法是二元运算。甚至

int x = a * b * c;

实际上涉及两次单独的乘法。由于中缀符号,它看起来不那么笨重了。

你可以做到

result = [[d1 decimalNumberByMultiplyingBy: d2] decimalNumberByMultiplyingBy: d3];

这相当于第一个陈述。

答案 1 :(得分:1)

附近没有Mac,但我认为你可以这样做:

NSDecimalNumber *d1 = [NSDecimalNumber decimalNumberWithString:@"1.502"];
NSDecimalNumber *d2 = [NSDecimalNumber decimalNumberWithString:@"12.472"];
NSDecimalNumber *d3 = [NSDecimalNumber decimalNumberWithString:@"0.765"];

//Calculation
NSDecimalNumber *finalValue = [[d1 decimalNumberByMultiplyingBy:d2] decimalNumberByMultiplyingBy:d3];

答案 2 :(得分:0)

只需编写一个封装NSDecimalNumber乘法方法的辅助方法,并获取3个NSDecimalNumber参数并返回NSDecimalNumber;