1

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

换句话说,如果我将 3 个整数相乘,我会:

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

int x = a * b * c;

但是,为了将 NSDecimalNumbers 相乘,您必须使用该decimalNumberByMultiplyingBy 方法

使用这种方法,我必须进行 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 而不是这种笨拙的方法?

4

3 回答 3

8

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

int x = a * b * c;

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

你可以做

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

这相当于第一个语句。

于 2012-03-06T16:20:22.143 回答
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];
于 2012-03-06T16:20:15.317 回答
0

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

于 2012-03-06T16:18:58.010 回答