Умножение 3 NSDecimalNumber (s) одновременно - PullRequest
1 голос
/ 06 марта 2012

Прежде всего, я использую 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 одновременно вместо этого неуклюжего обхода?

Ответы [ 3 ]

8 голосов
/ 06 марта 2012

Нет, это ответ. Умножение - это бинарная операция. Четный

int x = a * b * c;

на самом деле включает в себя два отдельных умножения. Это выглядит менее неуклюжим из-за записи инфикса.

Вы можете сделать

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

, что эквивалентно первому утверждению.

1 голос
/ 06 марта 2012

У меня нет 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];
0 голосов
/ 06 марта 2012

Просто напишите вспомогательный метод, который инкапсулирует методы умножения NSDecimalNumber, принимает 3 аргумента NSDecimalNumber и возвращает NSDecimalNumber;

...