Скругление удваивается для использования в NSString - PullRequest
2 голосов
/ 04 декабря 2011

У меня есть ситуация, когда у меня много разных значений double, например 1.00, 0.25 and 2.50.Я хотел бы округлить эти doubles, чтобы они стали 1, 0.25 and 2.5;другими словами, я хочу удалить любые конечные 0.Есть ли способ сделать это?

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

Ответы [ 4 ]

12 голосов
/ 07 декабря 2011

Пока вы говорите только об отображении, это довольно просто. Вы можете указать формат : %g:

Двойной аргумент должен быть преобразован в стиле f или e (или в стиле F или E в случае спецификатора преобразования G), с точностью, указывающей число значащие цифры [...] Заменяющие нули должны быть удалены из дробной части результата [...]

double twopointfive = 2.500;
double onepointzero = 1.0;
double pointtwofive = .25000000000;
NSLog(@"%g %f", twopointfive, twopointfive);
NSLog(@"%g %f", onepointzero, onepointzero);
NSLog(@"%g %f", pointtwofive, pointtwofive);

2011-12-06 21: 27: 59.180 TrailingZeroes [39506: 903] 2.5 2.500000
2011-12-06 21: 27: 59.184 TrailingZeroes [39506: 903] 1 1.000000
2011-12-06 21: 27: 59.185 TrailingZeroes [39506: 903] 0,25 0,250000

Тот же спецификатор формата можно использовать с NSNumberFormatter, что также даст вам некоторый контроль над значащими цифрами.

Замыкающие нули нельзя удалить из способа хранения числа в памяти, конечно.

2 голосов
/ 07 декабря 2011

Полагаю, вы хотите, чтобы спецификатор формата %g редактировал конечные нули.

1 голос
/ 13 декабря 2011

Вот список всех спецификаторов формата, которые вы можете использовать ...

%@     Object
%d, %i signed int
%u     unsigned int
%f     float/double

%x, %X hexadecimal int
%o     octal int
%zu    size_t
%p     pointer
%e     float/double (in scientific notation)
%g     float/double (as %f or %e, depending on value)
%s     C string (bytes)
%S     C string (unichar)
%.*s   Pascal string (requires two arguments, pass pstr[0] as the first, pstr+1 as the second)
%c     character
%C     unichar

%lld   long long
%llu   unsigned long long
%Lf    long double
1 голос
/ 07 декабря 2011

Не совсем округление, но вы пробовали просто %f, оно должно показывать только необходимое количество цифр, а не дополнять число.

Мой ответ выше неправильный, %g, как говорили другие, правильный путь.

Документация для форматировщиков строк также должна помочь.http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265

...