"9.4" 43.000 => "43" 9.4 => "9.40" (неверно) 43.000 => "43.00" (неверно)На оба вопроса ответы указывают NSNumberFormatter. Так что это должно быть легко достичь," />
Вопрос:

Ограничьте двойные до двух десятичных знаков без конечных нулей

iphone objective-c cocoa-touch decimal nsnumberformatter

19878 просмотра

3 ответа

9794 Репутация автора

Я прочитал это и это . Я хочу именно это:

1.4324 => "1.43"
9.4000 => "9.4"
43.000 => "43"

9.4 => "9.40" (неверно)
43.000 => "43.00" (неверно)

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

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 20)];

    NSNumberFormatter *doubleValueWithMaxTwoDecimalPlaces = [[NSNumberFormatter alloc] init];
    [doubleValueWithMaxTwoDecimalPlaces setNumberStyle:NSNumberFormatterDecimalStyle];
    [doubleValueWithMaxTwoDecimalPlaces setPaddingPosition:NSNumberFormatterPadAfterSuffix];
    [doubleValueWithMaxTwoDecimalPlaces setFormatWidth:2];

    NSNumber *myValue = [NSNumber numberWithDouble:0.01234];
    //NSNumber *myValue = [NSNumber numberWithDouble:0.1];

    myLabel.text = [doubleValueWithMaxTwoDecimalPlaces stringFromNumber:myValue];

    [self.view addSubview:myLabel];
    [myLabel release];
    myLabel = nil;
    [doubleValueWithMaxTwoDecimalPlaces release];
    doubleValueWithMaxTwoDecimalPlaces = nil;
}

Я тоже пробовал с

NSString *resultString = [NSString stringWithFormat: @"%.2lf", [myValue doubleValue]];
NSLog(@"%@", resultString);

Итак, как я могу отформатировать двойные значения с максимумом двух десятичных знаков? Если последняя позиция содержит ноль, то ноль должен быть пропущен.

Решение:

NSNumberFormatter *doubleValueWithMaxTwoDecimalPlaces = [[NSNumberFormatter alloc] init];
[doubleValueWithMaxTwoDecimalPlaces setNumberStyle:NSNumberFormatterDecimalStyle];
[doubleValueWithMaxTwoDecimalPlaces setMaximumFractionDigits:2];
NSNumber *myValue = [NSNumber numberWithDouble:0.01234];
NSLog(@"%@",[doubleValueWithMaxTwoDecimalPlaces stringFromNumber:myValue]];
[doubleValueWithMaxTwoDecimalPlaces release];
doubleValueWithMaxTwoDecimalPlaces = nil;
Автор: testing Источник Размещён: 26.10.2010 05:15

Ответы (3)


44 плюса

4722 Репутация автора

Решение

Попробуйте добавить следующую строку при настройке вашего форматера:

    [doubleValueWithMaxTwoDecimalPlaces setMaximumFractionDigits:2];
Автор: Chris Gummer Размещён: 26.10.2010 05:51

0 плюса

35146 Репутация автора

Как насчет обрезки нежелательных символов в конце строки ?:

NSString* CWDoubleToStringWithMax2Decimals(double d) {
    NSString* s = [NSString stringWithFormat:@"%.2f", d];
    NSCharacterSet* cs = [NSCharacterSet characterSetWithCharacterInString:@"0."];
    NSRange r = [s rangeOfCharacterInSet:cs
                                 options:NSBackwardsSearch | NSAnchoredSearch];
    if (r.location != NSNotFound) {
      s = [s substringToIndex:r.location];
    }
    return s;
}
Автор: PeyloW Размещён: 26.10.2010 06:05

0 плюса

61 Репутация автора

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown];
[numberFormatter setMinimumFractionDigits:2];
numberFormatter.positiveFormat = @"0.##";
NSNumber *num = @(total_Value);
Автор: Nirav Ghori Размещён: 10.04.2017 10:34
Вопросы из категории :
32x32