Могу ли я предоставить NSDecimalAdd () тот же самый NSDecimal, который используется как leftOperand также в качестве результата? - PullRequest
0 голосов
/ 26 августа 2009

Я не уверен, что это вызовет какие-то проблемы. Обычно, допустим, я суммирую несколько значений. Я бы сделал это так:

val1 = val1 + val2;
val1 = val1 + val3;
val1 = val1 + val4;

и так далее ... Могу ли я сделать что-то подобное с NSDecimal или я не должен предоставлять один и тот же NSDecimal "объект" дважды в параметрах? (кстати, как это называется? не "объект", верно?)

Apple говорит:

NSDecimalAdd
Adds two decimal values.

NSCalculationError NSDecimalAdd (
   NSDecimal *result,
   const NSDecimal *leftOperand,
   const NSDecimal *rightOperand,
   NSRoundingMode roundingMode
);

Обсуждение Добавляет слеваОперат и rightOperand и сохраняет сумму в результат.

Ответы [ 2 ]

1 голос
/ 27 августа 2009

Следующий код сделает дополнение, которое вы описали выше:

NSCalculationError calculationError = NSDecimalAdd(&val1, &val1, &val2, NSRoundBankers);
calculationError = NSDecimalAdd(&val1, &val1, &val3, NSRoundBankers);
calculationError = NSDecimalAdd(&val1, &val1, &val4, NSRoundBankers);

при условии, что вы установили val1, val2 и val3 как NSDecimals. В этом случае я использую Банковское поведение округления в случае переполнения.

Мы используем NSDecimal в основе Core Plot Framework , поэтому мы создали некоторые вспомогательные функции, которые делают этот вид математики немного проще (хотя и менее эффективным, из-за копирования структур при каждом вызове функции). Их можно найти в исходном файле CPUtilities.m в проекте.

1 голос
/ 27 августа 2009

Меня часто путают NSDecimal и NSDecimalNumber. Для меня это один из немногих замечательных недостатков Framework ... может быть, у меня просто не было этого "ах!" момент, как у меня с таким количеством других частей Какао / Touch?!? Как говорит Аарон Хиллегасс: «Какао / Obj-C делают обычные вещи легкими , а сложные вещи возможными ». Хорошо, вот случай, когда я думаю, что что-то общее (использование десятичного значения) слишком запутано ... и может / должно быть упрощено.

В любом случае, в этом случае, потому что NSDecimalAdd берет два указателя на NSDecimal и возвращает третий указатель, в результате вы можете повторно использовать val1 для вашего сердца. Вы просто меняете указатель с каждым оператором на новое возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...