如何在iOS应用程序中将小数位限制为仅四位

时间:2018-10-30 00:20:34

标签: ios swift xcode decimal

我正在制作温度滑块,但输出继续显示小数点后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()
    }

}

2 个答案:

答案 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