Быстрое измерениеFormatter from Celsius не работает

Я только начинаю с быстрого. Это то, что у меня есть на детской площадке...

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"

Как вы можете видеть выше, форматирование по Фаренгейту работает, а по Цельсию - нет...

Любая подсказка, что я делаю здесь не так??

Спасибо

1 ответ

Решение

Форматирование работает правильно.

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       - британский формат, в градусах Цельсия, с разделителем точек

37,3 °         - французский формат по Цельсию, с разделителем запятой

99,14°F     - формат США, по Фаренгейту, с разделителем-запятой

Другие вопросы по тегам