Вычитание валюты - NSNumber

Я имею дело с валютными ценностями, которые мне нужно вычесть друг из друга. Я читал, что NSNumber хорош для работы с валютой, однако я не могу вычесть два NSNumbers. Есть ли лучший способ борьбы с валютами или я что-то упустил?

 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

2 ответа

Решение

Вы не можете вычитать объекты, поэтому вы получаете ошибку.

Вы могли бы использовать NSDecimalNumber вместо NSNumber и тогда у вас есть API для decimalNumberBySubtracting:,

В качестве альтернативы используйте double,

Суть в том, чтобы использовать тип данных, который учитывает интересующий вас уровень точности и обычно относится к числу и типу вычислений, которые вы собираетесь выполнить.

NSNumberFormatter действительно предлагает generatesDecimalNumbers (раньше имелась ошибка, не уверен, что она все-таки есть, заслуживает изучения).

Вам нужно получить тип значения, которое вы сохранили в NSNumber, для арифметики преформ.

NSLog(@"result = %f", [number2 doubleValue] - [number doubleValue])
Другие вопросы по тегам