NSMassFormatter 无法将克转换为磅 (NSUnitMass) 或显示值
NSMassFormatter can't convert grams to lbs (NSUnitMass) or display value
我正在尝试使我的 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]
格式化程序 不执行任何转换。它只是格式化一个数量。克仍然是任何语言的克。
但是,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
是提供度量依赖字符串的关键方法。也可以通过将 maximumFractionDigits
设置为 0 来配置 NSNumberFormatter
以打印出舍入值。
执行此操作后,您无需使用 [[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
我正在尝试使我的 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]
格式化程序 不执行任何转换。它只是格式化一个数量。克仍然是任何语言的克。
但是,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
是提供度量依赖字符串的关键方法。也可以通过将 maximumFractionDigits
设置为 0 来配置 NSNumberFormatter
以打印出舍入值。
执行此操作后,您无需使用 [[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