Как обрезать нули после запятой - PullRequest
7 голосов
/ 13 марта 2012

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

trig = [currentVal doubleValue];
trig = trig/100;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:0];
display.text = [formatter stringFromNumber:[NSNumber numberWithDouble:trig]];

Число по-прежнему отображается без обрезки нулей после десятичной точки.

Здесь currentVal - это номер, который я ввожу.

Например, если я передаю «trig» = 123 (первоначально «trig» = 123 после выполнения trig / 100 я хочу отобразить 1.23, но он отображается как 1.23000000).

Ответы [ 8 ]

30 голосов
/ 13 марта 2012

Иногда прямые спецификаторы формата C выполняют более простую работу, чем классы форматирования Какао, и их можно использовать в строке формата для обычного сообщения stringWithFormat: на NSString.

Если ваше требованиечтобы не показывать конечные нули, спецификатор формата "g" выполняет свою работу:

float y = 1234.56789f;

NSString *s = [NSString stringWithFormat:@"%g", y];

Обратите внимание, что нет точной информации, что означает, что библиотека printf сама удалит конечные нули.

В документах содержится дополнительная информация, относящаяся к документам IEEE .

.
4 голосов
/ 13 января 2015

На случай, если это кому-нибудь поможет. Я хотел 1 десятичное значение, но без '.0' в конце, если число с плавающей запятой было '1.0'. Использование% g дало бы научную нотацию для более длинных чисел, поэтому уродство работало достаточно хорошо для меня, так как высокая точность не была критичной.

// Convert to 1 dp string,
NSString* dirtyString = [NSString stringWithFormat: @"%.1f", self.myFloat];

// Convert back to float that is now a maximum of 1 dp,
float myDirtyFloat = [dirtyString floatValue];

// Output the float subtracting the zeros the previous step attached
return [NSString stringWithFormat: @"%g", myDirtyFloat];
3 голосов
/ 13 марта 2012

Это не будет отображать десятичное значение после десятичной точки:

display.text = [NSString stringWithFormat:@"%1.0f", trig];

Это будет просто обрезать нули после десятичной точки:

isplay.text = [NSString stringWithFormat:@"%3.2f", trig];
display.text = [display.text stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:[NSString stringWithFormat@"0"]]];

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

2 голосов
/ 13 марта 2012

Из документации похоже, что setFractionDigits: предназначен только для преобразования в другую сторону.

Лучше всего, вероятно, преобразовать ваше число в целое число перед форматированиемнапример,

 double converted = round(trig); // man round for docs

Вы также можете использовать функции форматирования stringWithFormat: из NSString, но тогда вы потеряете все преимущества локализации, которые вы получите с NSNumberFormatter.

1 голос
/ 03 апреля 2014

Это работает

display.text = [@(trig) stringValue];
1 голос
/ 16 января 2013

Мне просто нужно было сделать это для одной из моих программ, и вот как я это сделал:

- (void) simplify{
        int length = (int)[self.calcString length];
        for (int i = (int)[self.calcString length]; i > 0; i--) {
            if  ([self.calcString rangeOfString:@"."].location != NSNotFound) {
                NSRange prevChar = NSMakeRange(i-1, 1);
                if ([[self.calcString substringWithRange:prevChar] isEqualToString:@"0"]||
                    [[self.calcString substringWithRange:prevChar] isEqualToString:@"."]) 
                    length--;
                else
                    break;
        }
        self.calcString = [self.calcString substringToIndex:length];
    }
}
1 голос
/ 16 апреля 2012

Это может быть неправильным решением, если есть NSNumberFormetter класс, но я просто сделал это, а не много гуглял! ;)

Вот пример, если это поможет:

-(NSString*) trimZerosAfterDecimalPoint:(NSString*)string_ {

    double doubleValue=[string_ doubleValue];    
    long   leftPart=(long)doubleValue;
    double rightPart=doubleValue-(double)leftPart;

    NSString *rightPartAsStr=[NSString stringWithFormat:@"%f", rightPart];

    int i=0;
    for (i=rightPartAsStr.length-1; i>=2; i--) {
        if ([rightPartAsStr characterAtIndex:i]!='0') {            
            rightPartAsStr=[rightPartAsStr substringWithRange:NSMakeRange(2, i-1)];
            break;
        }
    }

    if (i<2) {
        string_=[NSString stringWithFormat:@"%ld", leftPart];
    } else {
        string_=[NSString stringWithFormat:@"%ld.%@", leftPart, rightPartAsStr];
    }

    return string_;
}
0 голосов
/ 13 марта 2012

это из-за того, что ваш тип данных не может быть отформатирован.

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