我需要帮助使用Swift 4格式化文本字段中的小数位

时间:2018-05-24 03:59:59

标签: ios swift uitextfield

我选择“计算”功能后会执行一些计算。结果取决于输入的值。我需要将结果限制为2位小数。我尝试了很多没有运气的选择。任何帮助在这里将不胜感激。同样,我在iOS应用程序中使用Swift 4。

以下是我正在使用的一些代码:

@IBOutlet weak var f0TextField: UITextField!

@IBAction func calculateButton(_ sender: Any) {
    f0TextField.text = "\(((Double(f1TextField.text ?? "%.2f") ?? 0.0) + (Double(f2TextField.text ?? "%.2f") ?? 0.0))/2)"

我还有6个“文本字段”,我也必须应用它。

4 个答案:

答案 0 :(得分:1)

如果您想要小数点后2位的最终答案,则应将其应用于最终结果,如下所示。

let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = String(format: "%.2f", currentRatio)

实施例

let myDouble = 3.141
let doubleStr = String(format: "%.2f", myDouble) // "3.14"

答案 1 :(得分:0)

对@Sebastian的信用,使用他建议的代码,它的工作原理。您可以尝试它是否适合您

首先有这个扩展名

extension Double {
    /// Rounds the double to decimal places value
    func rounded(toPlaces places:Int) -> Double {
    let divisor = pow(10.0, Double(places))
    return (self * divisor).rounded() / divisor
}}

然后

let x = Double(textField.text).rounded(toPlaces: 2)
print(x) // to see if it works

答案 2 :(得分:0)

您需要分解该代码。首先获取两个文本字段的文本。然后将两个文本值转换为Double。然后添加两个数字。然后将总和转换为根据需要格式化的字符串。

以这种方式:

if let val1 = Double(f1TextField.text ?? "0"), let val2 = Double(f12TextField.text ?? "0") {
    let sum = val1 + val2
    f0TextField.text = String(format: "%.2f", sum)
}

但是你真的应该使用NumberFormatter以适当的区域敏感方式显示结果。而且很可能你需要它来解析用户输入的数字。

您可能还应该创建一个函数,该函数接收任意两个文本字段并返回String,然后您可以在相应的文本字段中进行设置。

答案 3 :(得分:0)

尝试使用常用的Extension for Double

extension Double
{
    //MARK: Rounds the double to decimal places value
    /**
     This func return Double to rounded Place
     - paramter places : Number of places to be rounded
     */
    func rounded(toPlaces places:Int) -> Double
    {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

Usgae - Double(newValue).rounded(toPlaces: 0)