首页 > 解决方案 > 摄氏的快速测量格式化程序不起作用

问题描述

我只是从 swift 开始。这就是我在操场上的...

let tempF1 = Measurement(value: 98.6, unit: UnitTemperature.fahrenheit)  
let tempC1 = tempF1.converted(to: UnitTemperature.celsius)  
let convertedTemperature1 = MeasurementFormatter().string(from: tempC1)

输出:
98.6 °F
37.0000000000025 °C。
“98.6°F”

let tempC2 = Measurement(value: 37, unit: UnitTemperature.celsius)  
let tempF2 = tempC2.converted(to: UnitTemperature.fahrenheit)  
let convertedTemperature2 = MeasurementFormatter().string(from: tempF2)

输出:
37.0 °C
98.59999999999546 °F
"98.6°F"

如上所示,格式化华氏温度有效,但摄氏温度无效...

任何线索我在这里做错了什么?

谢谢

标签: swiftmeasurementformatter

解决方案


格式化工作正常。

MeasurementFormatter 以其区域设置的正确格式输出值,默认为 .current。这意味着无论您使用什么单位来创建变量,它都将始终以与格式化程序的语言环境相对应的单位显示。

专门设置语言环境会改变输出

let mf = MeasurementFormatter()
let temp = Measurement(value: 37.3, unit: UnitTemperature.celsius)
mf.locale = Locale(identifier: "en_GB")
print(mf.string(from: temp))
mf.locale = Locale(identifier: "fr_FR")
print(mf.string(from: temp))
mf.locale = Locale(identifier: "en_US")
print(mf.string(from: temp))

这输出:

37.3°C       - UK format, in Celsius, and with a period separator

37,3 °         - French format in Celsius, and with a comma separator

99.14°F     - USA format, in Fahrenheit, and with a comma separator


推荐阅读