代码之家  ›  专栏  ›  技术社区  ›  rein

小数乘法奇异性

  •  4
  • rein  · 技术社区  · 16 年前

    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 回复  |  直到 10 年前
        1
  •  7
  •   stefanB    16 年前

    似乎对我有用。

    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
    
        2
  •  3
  •   Community Mohan Dere    9 年前

    我找到了答案:根据 How to use NSDecimalNumber? 我不容易在NSNumber和NSDecimalNumber之间转换。要从一个转换到另一个,我必须:

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