Я использую этот код, чтобы инвертировать NSDecimalNumber для упрощения арифметики:Отрицание в NSDecimalNumber без потери дробной части
self.thisTransaction.amount = [NSDecimalNumber decimalNumberWithString:self.amountField.text locale:NSLocale.currentLocale];
NSLog(@"1 thisTransaction.amount is %@",self.thisTransaction.amount);
// Inverts the transaction amount
// This code negates the number, but chops off the part on the right side of the decimal
self.thisTransaction.amount = [NSDecimalNumber decimalNumberWithMantissa:[self.thisTransaction.amount longLongValue] exponent:0 isNegative:YES];
NSLog(@"2 thisTransaction.amount is %@",self.thisTransaction.amount);
Ну, я думал, что арифметическое будет проще, во всяком случае. Однако, как показано в консоли считывании ниже, код сводит на нет числа, но отсекает число в десятичной точке и возвращает целое число вместо десятичного:
2015-05-27 10:07:30.767 XXXXX[11835:10266658] 1 thisTransaction.amount is 25.49
2015-05-27 10:07:39.735 XXXXX[11835:10266658] 2 thisTransaction.amount is -25
Я посмотрел на довольно много сообщений на SO, но они, похоже, кружатся по кругу. Я бы очень признателен за некоторые рекомендации.
EDIT:
В соответствии с @ rmaddy-й предложением ниже, я изменил код следующим образом:
self.thisTransaction.amount = [NSDecimalNumber decimalNumberWithString:self.amountField.text locale:NSLocale.currentLocale];
NSLog(@"1 thisTransaction.amount is %@",self.thisTransaction.amount);
// Inverts the transaction amount
NSDecimalNumber * invertedMultiplier = [NSDecimalNumber decimalNumberWithString:@"-1"];
self.thisTransaction.amount = [self.thisTransaction.amount decimalNumberByMultiplyingBy:invertedMultiplier];
NSLog(@"2 thisTransaction.amount is %@",self.thisTransaction.amount);
Это, кажется, работает хорошо.
Спасибо, и смотрите редактирование выше. – rattletrap99
Принятый ответ был изменен после того, как я сделал редактирование. И на самом деле, я использовал несколько иной подход, чем измененный ответ. Очевидно, обе стратегии будут работать, но исправление было явно предложено оригинальным ответом @ rmaddy. Благодаря! – rattletrap99