Объективное средство форматирования струны до для расстояний

У меня есть расстояние как плавание, и я ищу способ отформатировать его приятно для читателей. Идеально, я хотел бы, чтобы это изменилось от m до км, поскольку это становится больше, и к раунду число приятно. Преобразование в мили было бы премией. Я уверен, что у многих людей была потребность в одном из них, и я надеюсь, что существует некоторый код, плавающий вокруг где-нибудь.

Вот то, как я хотел бы форматы:

  • 0-100m: 47 м (в целом число)
  • 100-1000m: 325 м или 320 м (вокруг к ближайшим 5 или 10 метрам)
  • 1000-10000m: 1.2 км (вокруг к ближайшему с одним десятичным разрядом)
  • 10000 м +: 21 км

Если нет никакого доступного кода, как я могу записать свое собственное средство форматирования?

Спасибо

10
задан nevan king 24 February 2010 в 06:32
поделиться

3 ответа

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

// Returns a string representing the distance in the correct units.
// If distance is greater than convert max in feet or meters, 
// the distance in miles or km is returned instead
NSString* getDistString(float distance, int convertMax, BOOL includeUnit) {
  NSString * unitName;
  if (METRIC) {
    unitName = @"m";
    if (convertMax != -1 && distance > convertMax) {
      unitName = @"km";
      distance = distance / 1000;
    }
  } else {
    unitName = @"ft";
    if (convertMax != -1 && distance > convertMax) {
      unitName = @"mi";
      distance = distance / 5280;
    }
    distance = metersToFeet(distance);
  }

  if (includeUnit) return [NSString stringWithFormat:@"%@ %@", formatDecimal_1(distance), unitName];

  return formatDecimal_1(distance);

}
// returns a string if the number with one decimal place of precision
// sets the style (commas or periods) based on the locale
NSString * formatDecimal_1(float num) {
  static NSNumberFormatter *numFormatter;
  if (!numFormatter) {
    numFormatter = [[[NSNumberFormatter alloc] init] retain];
    [numFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
    [numFormatter setLocale:[NSLocale currentLocale]];
    [numFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numFormatter setMaximumFractionDigits:1];
    [numFormatter setMinimumFractionDigits:1];
  }

  return [numFormatter stringFromNumber:F(num)];

}
2
ответ дан 3 December 2019 в 13:13
поделиться

Да, вам нужно написать ваш собственный форматировщик, например

#include <math.h>
NSString* convertDistanceToString(float distance) {
    if (distance < 100)
       return [NSString stringWithFormat:@"%g m", roundf(distance)];
    else if (distance < 1000)
       return [NSString stringWithFormat:@"%g m", roundf(distance/5)*5];
    else if (distance < 10000)
       return [NSString stringWithFormat:@"%g km", roundf(distance/100)/10];
    else
       return [NSString stringWithFormat:@"%g km", roundf(distance/1000)];
}
...
NSLog(@"The distance is %@", convertDistanceToString(1024));
17
ответ дан 3 December 2019 в 13:13
поделиться

обнаружил, что это сегодня задает тот же вопрос .... идя с:

 NSString *rvalue;
    if (value > 1000) {
        rvalue = [NSString stringWithFormat:@"%.02f km",value];
    }else {
        rvalue = [NSString stringWithFormat:@"%.02f m",value];
    }

, можно обернуть это в метод, если нужно

{{ 1}}
0
ответ дан 3 December 2019 в 13:13
поделиться