Валюта NSNumberFormatter удаляет конечные нули

Я хочу форматировать цены как 45,50, но мне не нужны цены как 45,00. Как я могу этого избежать?


person efpies    schedule 04.09.2012    source источник


Ответы (4)


Я сделал это следующим образом:

NSNumber *amount = @(50.5);
NSNumberFormatter *currencyFormat = [[NSNumberFormatter alloc] init];
[currencyFormat setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormat setLocale:[NSLocale currentLocale]];

if (trunc(amount.floatValue) == amount.floatValue) {
    [currencyFormat setMaximumFractionDigits:0];
} else {
    [currencyFormat setMaximumFractionDigits:2];
}

NSLog(@"%@", [currencyFormat stringFromNumber:amount]);

Мне нравится это решение своей простотой. Выход будет $50.50. А за amount = @(50.0) будет $50

person surfrider    schedule 25.02.2014

Сделай это:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];
NSLog(@"Result...%@",numberString);//Result 22.37

Теперь следуйте нежелательным, как это:

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;
}
person Paresh Navadiya    schedule 04.09.2012

  INPUT : 12.74 OR 12.745

NSString *inputString=[NSString string];


inputString=[NSString stringWithFormat:@"%.4g",12.74f];


NSLog(@"inputString : %@ \n\n",inputString);

ВЫВОД:

  inputString : 12.74 
INPUT : 12.00 OR 12.000

  NSString *inputString=[NSString string];


 inputString=[NSString stringWithFormat:@"%.4g",12.00f];


 NSLog(@"inputString : %@ \n\n",inputString);

ВЫВОД:

inputString: 12 ОБНОВЛЕННЫЙ ОТВЕТ: на его вопрос комментария

ВХОД:12.30

Я предполагаю, что здесь он собирается показать это значение в каком-то пользовательском интерфейсе, таком как UILabel, ..... Не для расчета.

 NSString *inputString=[NSString string];


 inputString=[NSString stringWithFormat:@"%.4g",12.30f];


 NSArray *arr=[inputString componentsSeparatedByString:@"."];


 if ([arr count] >= 2) {

    NSString *secondStr=[arr objectAtIndex:1];

if ([secondStr length]<2) {

    inputString=[NSString stringWithFormat:@"%@0",inputString];
}
}

NSLog(@"inputString : %@ \n\n",inputString); ВЫВОД:

строка ввода: 12.30

person prashant    schedule 04.09.2012

Если вам нужен очень быстрый и грязный взлом . . .

// Get the price as a string
NSString *priceString = [NSString stringWithFormat:@"%2.2f", priceFloat];

// Trim if needed
if ([priceString hasSuffix:@".00"])
    priceString = [priceString substringToIndex:priceString.length-3];

NB Этот метод не будет работать для локализованного контента, т. е. в Европе десятичным разделителем является запятая, поэтому вы увидите 45,00, а не 45,00.

person deanWombourne    schedule 04.09.2012