Некоторое время назад я видел подобную тему об этом, но, похоже, это было связано с тем, что уравнение использовало NSNumber где-то. Я проверил весь свой код, и все, что я вижу, это то, что я использую NSDecimalNumbers для своих уравнений.
У меня есть веб-сервис JSON, который возвращает некоторые номера цен.
Сразу после разбора их в свойствах объекта я хочу запустить с ними следующее уравнение:
Чистая цена * ( 1 + (RawPercentage / 100)) + Фиксированная цена = обработанная чистая цена
Обновление: я изменил код на это:
NSDecimalNumber *one = [NSDecimalNumber one];
if (!self.netPrice || [self.netPrice isKindOfClass:[NSNull class]])
{ self.netPrice = [NSDecimalNumber zero]; }
NSDecimalNumber *nettoPrijs = self.netPrice;
NSLog(@"self.netPrice = %@",self.netPrice);
//Returns: self.netPrice = 89.25
NSLog(@"nettoPrijs = %@",nettoPrijs);
//Returns: nettoPrijs = 89.25
if (!self.userData.BandFixed || [self.userData.BandFixed isKindOfClass:[NSNull class]])
{ self.userData.BandFixed = [NSDecimalNumber zero]; }
NSDecimalNumber *fixedPrice = self.userData.BandFixed;
NSLog(@"self.userData.BandFixed = %@",self.userData.BandFixed);
//Returns: self.userData.BandFixed = 0
NSLog(@"fixedPrice = %@",fixedPrice);
//Returns: fixedPrice = 0
if (!self.userData.BandPercentage || [self.userData.BandPercentage isKindOfClass:[NSNull class]])
{ self.userData.BandPercentage = [NSDecimalNumber zero]; }
NSDecimalNumber *rawPercentage = self.userData.BandPercentage;
NSLog(@"self.userData.BandPercentage = %@",self.userData.BandPercentage);
//Returns: self.userData.BandPercentage = 0
NSLog(@"rawPercentage = %@",rawPercentage);
//Returns: rawPercentage = 0
NSDecimalNumber *percentage = [rawPercentage decimalNumberByMultiplyingByPowerOf10:-2];
NSLog(@"percentage = %@",percentage);
//Returns: percentage = 0
NSDecimalNumber *onePercent = [one decimalNumberByAdding:percentage];
NSLog(@"onePercent = %@",onePercent);
//Returns: onePercent = 1
NSDecimalNumber *onePercentTimesNetPrice = [onePercent decimalNumberByMultiplyingBy:nettoPrijs];
NSLog(@"onePercentTimesNetPrice = %@",onePercentTimesNetPrice);
//Returns: onePercentTimesNetPrice =
-0.000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000359498933794611654993903616
NSDecimalNumber *addingFixed = [onePercentTimesNetPrice decimalNumberByAdding:fixedPrice];
NSLog(@"addingFixed = %@",addingFixed);
//Returns: addingFixed =
-0.000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000359498933794611654993903616
Если я изменю:
NSDecimalNumber *onePercentTimesNetPrice = [onePercent decimalNumberByMultiplyingBy:nettoPrijs];
to:
NSDecimalNumber *onePercentTimesNetPrice = [nettoPrijs decimalNumberByMultiplyingBy:onePercent];
он падает:
-[__NSCFNumber decimalNumberByMultiplyingBy:]: unrecognized selector sent to instance 0x84ad160
NSDecimalNumber
в первую очередь? Они боль в тылу, чтобы использовать. - person trojanfoe   schedule 10.12.2012float
илиdouble
? Они простые, быстрые и работают как положено. - person trojanfoe   schedule 10.12.2012