let userDefined = Measurement(value: Double(userInput.text!)!, unit: UnitMass.kilograms)
let calculatedValue = userDefined.converted(to: UnitMass.grams)
print(calculatedValue)
let formatter = MeasurementFormatter()
formatter.locale = Locale(identifier: "en_US")
Convertedunit.text = formatter.string(from: calculatedValue)
用户输入是5
。
print(calculatedValue)
的输出是 5000.0g
。
但是,Convertedunit.text
的输出是 11.003lbs
,以磅为单位。我尝试使用不同的方法,但仍然不是以克为单位。谁能赐教一下?
最佳答案
由于 formatter.locale = Locale(identifier: "en_US")
,格式化程序会自动将所有内容转换为英制单位系统,在本例中为磅。另一方面,克属于公制。
有两种方法可以改变这种行为:
A) 如果您想使用公制系统,请为使用它的国家/地区指定区域设置,例如德国。 formatter.locale = Locale(标识符:“de_DE”)
。别担心,这不会影响字符串的语言(例如德语:Meter、英语:Meters、法语:Mètres),因为它仍然与应用语言绑定(bind)。
B) 如果您想保留放入格式化程序的任何单元,只需声明:formatter.unitOptions = .init(arrayLiteral: .providedUnit)
这样格式化程序将使用您提供的任何单位生成字符串。
关于swift - MeasurementFormatter 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322170/