NSMassFormatter не может преобразовать граммы в фунты (NSUnitMass) или отображаемое значение
Я пытаюсь модернизировать свои вызовы API и хочу использовать NSMassFormatter
, Проблема проста. Я не могу получить какой-либо вывод (нацеливаясь на имперский язык). NSMeasurement's
описание верно.
Как сделать NSMassFormatter
отображать вес "123 фунта" автоматически, если я предоставлю грамм?
NSNumber *weightInGrams = @(62453.0);
NSMassFormatter *weightFormatter = [NSMassFormatter new];
weightFormatter.forPersonMassUse = YES;
weightFormatter.numberFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_UK"];
NSMeasurement *weightMeasurement = [[NSMeasurement alloc] initWithDoubleValue:[weightInGrams doubleValue] unit:[NSUnitMass grams]];
NSString *weightString = [weightFormatter unitStringFromValue:[weightInGrams doubleValue] unit:NSMassFormatterUnitPound];
NSLog(@"%@", weightMeasurement);
NSLog(@"%@", weightString);
2019-03-26 17:23:37.535156+0100 testasa[65239:9291466] <NSMeasurement: 0x60800002d020> value: 62453.000000 unit: g
2019-03-26 17:23:37.535169+0100 testasa[65239:9291466]
2 ответа
Форматировщик не выполняет никаких преобразований. Это просто форматирует количество. Грамм по-прежнему является граммом на любом языке.
Однако NSMassFormatter предоставляет удобный метод, основанный на килограммах. Так, например:
let grams = 62453.0
let measurement = Measurement(value: grams, unit: UnitMass.grams)
let kilos = measurement.converted(to: .kilograms)
let formatter = MassFormatter()
formatter.isForPersonMassUse = true
let s = formatter.string(fromKilograms: kilos.value)
print(s) // "137.685 lb” on my machine
Для тех, кто придет сюда в будущем. Вы получите правильную строку, если вы не измените NSLocale
в коде. Если вам нужно изменить это, сделайте это в Системных настройках. stringFromKilograms
является ключевым методом, который обеспечивает метрику зависимой строки Также можно настроить NSNumberFormatter
распечатать округленные значения, установив maximumFractionDigits
до 0.
После этого вам не нужно проверять метрическую систему с [[NSLocale currentLocale] usesMetricSystem]
NSNumber *weightInGrams = @(62403.0);
NSMassFormatter *formatter = [NSMassFormatter new];
formatter.forPersonMassUse = YES;
formatter.unitStyle = NSFormattingUnitStyleShort;
//formatter.numberFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; -> source of bug
formatter.numberFormatter.maximumFractionDigits = 0;
NSString *weightString = [formatter stringFromKilograms:[weightInGrams doubleValue]/1000];
Печатает правильно:
(lldb) po weightString3
138lb