1

まず、通貨を扱っているので NSDecimalNumbers を使用しています。10 進数自体に問題はありません。同時に 3 つの NSDecimalNumber(s) を乗算できるかどうかを知りたいです。

言い換えれば、3 つの整数を乗算する場合、単純に次のようにします。

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

int x = a * b * c;

ただし、 NSDecimalNumbers を乗算するには、decimalNumberByMultiplyingBy メソッドを使用する必要があります。

このメソッドを使用すると、扱っている 3 つの NSDecimalNumbers を乗算するために、次のように 2 つの計算を行う必要があります。

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;

実際には2つの別々の乗算が含まれます。中置記法のため、見た目は不格好ではありません。

できるよ

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 に答える