减去货币 - NSNumber

Subtracting Currency - NSNumber

我正在处理需要相互减去的货币值。我读到 NSNumber 很适合处理货币,但是我无法减去两个 NSNumber。有没有更好的处理货币的方法,还是我遗漏了一些小东西?

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
        [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
        NSNumber* number = [numberFormatter  numberFromString:bDict[@"booking_deposit"]];
        if (!number) {
            [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
            number = [numberFormatter  numberFromString:bDict[@"booking_deposit"]];
        }
        NSNumber* number2 = [numberFormatter  numberFromString:bDict[@"booking_total"]];
        if (!number2) {
            [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
            number2 = [numberFormatter  numberFromString:bDict[@"booking_total"]];
        }
        NSLog(@"result %@",number2 - number);//warning here

这是警告:

Arithmetic on pointer to interface 'NSNumber', which is not a constant size for this architecture and platform

你不能减去对象,这就是你得到错误的原因。

您可以使用 NSDecimalNumber 而不是 NSNumber 然后 API 用于 decimalNumberBySubtracting:

或者,使用 double

要点是使用允许您感兴趣的精度级别的数据类型,并且通常与您要进行的计算的数量和类型有关。

NSNumberFormatter 确实提供 generatesDecimalNumbers(它曾经有一个错误,不确定是否仍然存在,值得研究)。

您需要获取存储在 NSNumber 中的值的类型以执行算术运算。

NSLog(@"result = %f", [number2 doubleValue] - [number doubleValue])