У меня есть расстояние как плавание, и я ищу способ отформатировать его приятно для читателей. Идеально, я хотел бы, чтобы это изменилось от m до км, поскольку это становится больше, и к раунду число приятно. Преобразование в мили было бы премией. Я уверен, что у многих людей была потребность в одном из них, и я надеюсь, что существует некоторый код, плавающий вокруг где-нибудь.
Вот то, как я хотел бы форматы:
Если нет никакого доступного кода, как я могу записать свое собственное средство форматирования?
Спасибо
Вот как я это делаю. Это использует языковой стандарт пользователя для правильного форматирования строки, что, вероятно, вам также следует сделать.
// 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)];
}
Да, вам нужно написать ваш собственный форматировщик, например
#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));
обнаружил, что это сегодня задает тот же вопрос .... идя с:
NSString *rvalue; if (value > 1000) { rvalue = [NSString stringWithFormat:@"%.02f km",value]; }else { rvalue = [NSString stringWithFormat:@"%.02f m",value]; }
, можно обернуть это в метод, если нужно
{{ 1}}