Как разделить NSDecimalnumber между десятичным числом и целым числом и назад

Вам нужно перейти к расширениям (CTRL + SHIFT + E) на панели активности, щелкнуть шестерню рядом с расширением и выбрать Отключить (рабочая область) . По-видимому, также возможно отключить расширение глобально и активировать его, только если оно явно включено в `{workspace} /. Vscode / settings.json '.

It's possible to disable extensions per workspace

7
задан Alan Taylor 8 May 2013 в 02:05
поделиться

4 ответа

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

NSDecimalNumberHandler *behavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:0 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
NSDecimalNumber *price = /* eg. 10.5 */;
NSDecimalNumber *dollars = [price decimalNumberByRoundingAccordingToBehavior: behavior];
NSDecimalNumber *cents = [price decimalNumberBySubtracting: dollars];

Это даст Вам 10 и 0.5 в dollars и cents переменные соответственно. Если Вы хотите целые числа, можно использовать этот метод для умножения Вашего cents питанием 10.

cents = [cents decimalNumberByMultiplyingByPowerOf10: 2];

Который в свою очередь умножит Вас cents 100, давая Вам 10 и 5 дюймов dollars и cents. Необходимо также знать, что можно использовать отрицательные полномочия 10 здесь для деления.

Так,

cents = [cents decimalNumberByMultiplyingByPowerOf10: -2];

отменил бы тот последний метод.

19
ответ дан 6 December 2019 в 10:54
поделиться

Если у Вас нет доступа к математике fns, это может работать:

double val = [dn doubleValue]; // dn is a NSDecimalNumber*
int intPart = (int) val;
double doublePart = (val - intPart); 

Это может дать Вам некоторую проблему, цикл никогда не может завершаться, в этом случае необходимо будет поместить счетчик там:

while (doublePart != (int)doublePart) doublePart*=10;
0
ответ дан 6 December 2019 в 10:54
поделиться

Не уверенный, как что цель Математических функций c имеет только что-то

Math.floor(10.5) = 10
(10.5 - 10) * 10 = 5

бит более ясного примера (cos 10-х)

Math.floor(20.4) = 20
(20.4 - 20) * 10 = 4;

Другая проблема

(5 / 10) = .5
10 + .5 = 10.5

Эти 10, используемые на десятичных точках, зависят от количества десятичных разрядов..., например,

Math.floor(20.44) = 20
(20.44 - 20) * 100 = 44;

требует Вас ко временам 100

0
ответ дан 6 December 2019 в 10:54
поделиться

double floor (double x); функция POSIX. Эта функция может использоваться для нахождения самого высокого целочисленного значения не больше, чем x.

double x = 10.5;

double y = floor (x);
// y = 10.0

double z = x - y;
// z = 0.5
-1
ответ дан 6 December 2019 в 10:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: