Вопрос по objective-c – Ограничение десятичных знаков тем, что необходимо [дубликат]

4

Возможное дублирование:
Круглые числа в Objective-C
objective -C: как обрезать лишний ноль в float?
Исправление чисел с плавающей точкой

В Цели C у меня есть двойник, который получает ответ на расчет, как показано:

<code>double answer = a / b;
</code>

Двойная переменная иногда может быть целым числом, но также может быть дробью, наприме

<code>NSLog(@"%f", answer)
</code>

Это может вернуть 2.000000 или 5.142394 или 2.142000.

Мне было интересно, есть ли способ отредактировать десятичные разряды, чтобы конечные 0 не были видны, например:

2.000000 будет 2
5.142394 будет 5.142394
2.142000 будет 2.142

Как это может быть сделано

На самом деле, это та же самая проблема ... Двойное число - это число с плавающей запятой, и ответ решает проблему округления, о которой вы спрашиваете. lnafziger
Разве a.f / b.f не ограничит его целочисленными значениями? CodaFi
@ lnafziger Это не совсем так, поскольку это не проблема с плавающей запятой CoreCode
@ lnafziger Опять же, это не проблема округления. Я ни при каких обстоятельствах не хочу, чтобы число было округлено. CoreCode
@ CodaFi Я не хочу ограничивать его целочисленными значениями. Это должно иметь dec мест, но не с превышением 0. Это не дубликат, так как я не пытаюсь округлять числа. Я никогда не упоминал округления чисел. CoreCode

Ваш Ответ

2   ответа
2

NSNumberFormatter это именно то, что вы ищете. (мои извинения, если вы не работаете с Mac, позже я опубликую ссылку на аналогичные документы по iOS).

EDIT (по запросу): NSNumberFormatter фактически доступен для iOS (документы, которые я разместил выше, одинаковы для iOS) и имеет несколько соответствующих свойств, которые вы должны установить. Во-первых, его свойство numberStyle должно быть установлено в NSNumberFormatterDecimalStyle (другие включают в себя проценты, банкир и расшифровку). NSNumberFormatter также включает свойство roundingMode, которое в вашем случае должно быть NSNumberFormatterRoundHalfEven. Это изменит десятичное число, чтобы округлить последнюю цифру, но это лучший способ избавиться от этих нулей.

% g и% f означают одно и то же. Вместе с% e, и я думаю, что даже% EE. CodaFi
@ CodaFi Я тоже так думал, но по некоторым причинам% g работает на iOS .... lnafziger
Да, я работаю с устройствами IOS. Не могли бы вы предоставить переписать, чтобы я мог знать, как это осуществить? CoreCode
Я нашел один метод, использующий% g вместо% f CoreCode
% g, кажется, работает на меня, хотя CoreCode
10

которые вы ищете, это даст вам два десятичных знака:

NSLog(@"%.2f", answer);

Подробнее о спецификаторах формата читайте здесь:

http: //www.cplusplus.com/reference/clibrary/cstdio/printf

В качестве альтернативы, если вы хотите оперативно изменять количество десятичных разрядов, рассмотрите возможность использования NSNumberFormatter учебный класс

int maxDigitsAfterDecimal = 3; // here's where you set the dp

NSNumberFormatter * nf = [[NSNumberFormatter alloc] init];
[nf setMaximumFractionDigits:maxDigitsAfterDecimal];

NSString * trimmed = [nf stringFromNumber:[NSNumber numberWithDouble:3.14159]];
NSLog(@"%@", trimmed); // in this case, 3.142

[nf release];
Если бы вы могли переписать свой ответ с правильным решением, я поставлю зеленую галочку CoreCode
Я отредактировал свой ответ, включив в него пример NSNumberFormatterExample. Я только что проверил этот пример, чтобы убедиться, что он работает wpearse
Мне нужно, чтобы он был динамичным, поэтому не всегда 2 декабря места CoreCode

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