NSDecimalNumber乘法奇怪

时间:2010-04-04 22:28:03

标签: objective-c cocoa-touch nsdecimalnumber

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);

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

我找到了答案:根据How to use NSDecimalNumber?我无法在NSNumber和NSDecimalNumber之间轻松转换。要从一个转换为另一个,我必须做:

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

如果NSNumberFormatter有一个decimalNumberFromString:方法,那就太好了。

相关问题