objective-c - 用于距离的 objective-c 字符串格式化程序

标签 objective-c cocoa string distance formatter

我有一个 float 的距离,我正在寻找一种方法来为人类读者很好地格式化它。理想情况下,我希望它随着它变大而从 m 变为 km,并很好地四舍五入。转换为英里将是一个奖励。我敢肯定很多人都需要其中之一,我希望有一些代码可以在某处使用。

这是我想要的格式:

  • 0-100m:47m(整数)
  • 100-1000m:325m 或 320m(四舍五入到最近的 5 或 10 米)
  • 1000-10000m:1.2km(四舍五入到小数点后一位)
  • 10000米+:21公里

如果没有可用的代码,我该如何编写自己的格式化程序?

谢谢

最佳答案

这些解决方案都没有真正满足我的需求,因此我以它们为基础:

#define METERS_TO_FEET  3.2808399
#define METERS_TO_MILES 0.000621371192
#define METERS_CUTOFF   1000
#define FEET_CUTOFF     3281
#define FEET_IN_MILES   5280

- (NSString *)stringWithDistance:(double)distance {
    BOOL isMetric = [[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue];

    NSString *format;

    if (isMetric) {
        if (distance < METERS_CUTOFF) {
            format = @"%@ metres";
        } else {
            format = @"%@ km";
            distance = distance / 1000;
        }
    } else { // assume Imperial / U.S.
        distance = distance * METERS_TO_FEET;
        if (distance < FEET_CUTOFF) {
            format = @"%@ feet";
        } else {
            format = @"%@ miles";
            distance = distance / FEET_IN_MILES;
        }
    }

    return [NSString stringWithFormat:format, [self stringWithDouble:distance]];
}

// Return a string of the number to one decimal place and with commas & periods based on the locale.
- (NSString *)stringWithDouble:(double)value {
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setLocale:[NSLocale currentLocale]];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMaximumFractionDigits:1];
    return [numberFormatter stringFromNumber:[NSNumber numberWithDouble:value]];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    double distance = 5434.45;
    NSLog(@"%f meters is %@", distance, [self stringWithDistance:distance]);

    distance = 543.45;
    NSLog(@"%f meters is %@", distance, [self stringWithDistance:distance]);    

    distance = 234234.45;
    NSLog(@"%f meters is %@", distance, [self stringWithDistance:distance]);    
}

关于objective-c - 用于距离的 objective-c 字符串格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2324125/

相关文章:

objective-c - main() 之外的变量值不正确

xcode - 显示后调整 NSPopover 的大小

objective-c - appendBezierPathWithGlyph 在 [NSBezierPath currentPoint] 中失败

c# - String.GetHashCode() 返回不同的值

c++ - getline 的实现(istream& is, string& str )

ios - UICollectionView 使用 SDWebImage 滚动

ios - 在 Xcode 中重命名项目

ios - 解析incrementKey导致iOS应用程序崩溃

objective-c - 为什么我在将多个 QTCaptureVideoPreviewOutputs 与单个 QTCaptureSession 一起使用时会遇到低帧率?

java - 如何显示字符串数组?