Быстрое измерение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 - формат США, по Фаренгейту, с разделителем-запятой