Вычитание валюты - 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])