4

ExclusivePrice、数量は両方ともNSDecimalNumbersです。

NSDecimalNumber *price = [exclusivePrice decimalNumberByMultiplyingBy:quantity];
NSLog(@"%@ * %@ = %@", exclusivePrice, quantity, price);

私が得る結果:

2010-04-05 00:22:29.111 TestApp[13269:207] 65 * 2 = -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007169919476068871316457914368

私が期待したこと:

2010-04-05 00:22:29.111 TestApp[13269:207] 65 * 2 = 130

誰かがこれを説明できますか?

編集:

完全な再現:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSDecimalNumber *n2 = (NSDecimalNumber *)[formatter numberFromString:@"2"];
NSDecimalNumber *n1 = (NSDecimalNumber *)[NSDecimalNumber numberWithInt:65];
NSDecimalNumber *n3 = [n1 decimalNumberByMultiplyingBy:n2];
NSLog(@"%@ * %@ = %@", n1, n2, n3);
4

2 に答える 2

7

私にはうまくいくようです。

NSDecimalNumber * n1 = [NSDecimalNumber decimalNumberWithString:@"65"];
NSDecimalNumber * n2 = [NSDecimalNumber decimalNumberWithString:@"2"];

NSDecimalNumber * res = [n1 decimalNumberByMultiplyingBy:n2];

NSLog(@"%@ * %@ = %@", n1, n2, res);

出力:

2010-04-05 08:40:42.812 x[24301] 65 * 2 = 130
于 2010-04-04T22:44:11.247 に答える
3

私は答えを見つけました:NSDecimalNumberの使い方によると?NSNumber と NSDecimalNumber の間で簡単に変換できません。あるものから別のものに変換するには、次のことを行う必要があります。

NSDecimalNumber *n2 = [NSDecimalNumber decimalNumberWithDecimal:
                              [[formatter numberFromString:@"2"] decimalValue]];

NSNumberFormatter に decimalNumberFromString: メソッドがあればよかったのに。

于 2010-04-04T23:14:28.450 に答える