我正在制作温度滑块,但输出继续显示小数点后15位左右。如何解决这个问题,让它在小数点后仅显示4个数字?
import UIKit
class TemperatureViewController : UIViewController {
@IBOutlet weak var fahrenheitLabel: UILabel!
@IBOutlet weak var celsiusLabel: UILabel!
@IBOutlet weak var kelvinLabel: UILabel!
@IBOutlet weak var temperatureSlider: temperatureSlider!
var temperature:Measurement<UnitTemperature> {
let fahrenheitValue = Measurement<UnitTemperature>(value: Double(temperatureSlider.value), unit: UnitTemperature.celsius)
return fahrenheitValue
}
@IBAction func sliderChange(_ sender: Any) {
updateTemperatureDisplay()
}
func updateTemperatureDisplay() {
celsiusLabel.text = temperature.description
fahrenheitLabel.text = temperature.converted(to: .fahrenheit).description
kelvinLabel.text = temperature.converted(to: .kelvin).description
}
override func viewDidLoad() {
updateTemperatureDisplay()
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
答案 0 :(得分:2)
在大多数情况下,您应该使用可用的格式化程序。 Measurements API提供了一个MeasurementFormatter
,这是一个很好的起点
let celsius = Measurement<UnitTemperature>(value: 10.91235, unit: UnitTemperature.celsius)
let fahrenheit = celsius.converted(to: .fahrenheit)
let mf = MeasurementFormatter()
mf.unitOptions = .providedUnit
mf.string(from: celsius)
mf.string(from: fahrenheit)
所以上面的示例基本上输出了
10.91235 °C // original
51.64222999999585 °F // converted
10.912°C
51.642°F
如果您需要更多控制权,则可以向NumberFormatter
提供自己的MeasurementFormatter
let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 4
numberFormatter.minimumFractionDigits = 2
let mf = MeasurementFormatter()
mf.numberFormatter = numberFormatter
mf.unitOptions = .providedUnit
答案 1 :(得分:0)
您可以扩展Double
(如果需要在其他地方执行此操作,请在整个应用中使用它):
extension Double {
func truncate(places: Int) -> Double {
return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
}
}
let rawValue = 51.64222999999585
let formattedValue = rawValue.truncate(places: 4)
print(formattedValue) // 51.6422