You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MeasurementFormatter工作异常:克单位转换结果显示为磅

解决MeasurementFormatter显示磅而非克的问题

嘿,这个问题我碰到过!核心原因是MeasurementFormatter会根据你设置的locale自动选择当地常用的单位——你设置了en_US,而美国日常用磅(lbs)作为质量单位,所以哪怕你传入的是克的Measurement,它也会自动转成磅来显示,这是它的默认行为。

快速解决方法

只需要给formatter加上一行配置,强制它使用你传入的Measurement的单位:

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")
// 关键:强制使用传入的单位,不自动转换
formatter.unitOptions = .providedUnit
// 可选:设置单位显示样式,比如.short显示"5000 g",.long显示"5000 grams"
formatter.unitStyle = .short
Convertedunit.text = formatter.string(from: calculatedValue)

加上formatter.unitOptions = .providedUnit后,Formatter就会严格按照calculatedValue的克单位来输出,不会再自动转成磅了。

额外建议:避免强制解包崩溃

你的代码里用了两次强制解包Double(userInput.text!)!,如果用户输入非数字内容,APP会直接崩溃。建议用可选绑定处理输入:

guard let inputText = userInput.text, let inputValue = Double(inputText) else {
    Convertedunit.text = "请输入有效数字"
    return
}

let userDefined = Measurement(value: inputValue, unit: UnitMass.kilograms)
let calculatedValue = userDefined.converted(to: UnitMass.grams)

let formatter = MeasurementFormatter()
formatter.locale = Locale(identifier: "en_US")
formatter.unitOptions = .providedUnit
formatter.unitStyle = .short
Convertedunit.text = formatter.string(from: calculatedValue)

这样处理后,输入无效内容时会给用户提示,而不是崩溃。

内容的提问来源于stack exchange,提问作者Big Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:33:21