首页 > 解决方案 > 如何将文本输入从字符串转换为浮点数

问题描述

我正在创建一个计算器/单位转换应用程序,并且只希望文本输入只接受浮点数和整数。我尝试将文本输入键盘设置为数字键盘,但程序仍将其视为“字符串?”。

编辑:我的最终目标是有一个接受浮点数的文本输入,并且可以允许我的程序这样对待它。目前,当输入数字时,代码仍将其视为字符串。我希望将其转换为浮点数。

我读到 using(...as NSString).floatValue会起作用,但似乎对我不起作用。这是我的代码

import UIKit

class ViewController: UIViewController{
    @IBOutlet weak var numberOutput: UILabel!
    @IBOutlet weak var numberInput: UITextField!

    //

    @IBAction func onTouchDown(_ sender: UITextField) {
        var number = (numberInput.text as NSString).floatValue
        print(number*2)
    } 
}

标签: iosswift

解决方案


您只能允许数字和“。” 使用shouldChangeCharactersInRange方法:

func textField(textField: UITextField, shouldChangeCharactersInRange range: Range, replacementString string: String) -> Bool
        {
            let newCharacters = CharacterSet(charactersIn: string)
            let isNumber = CharacterSet.decimalDigits.isSuperset(of: newCharacters)
            if isNumber {
                return true
            } else {
                if string == "." {
                    let dotscount = textField.text!.components(separatedBy: ".").count - 1
                    if dotscount == 0 {
                        return true
                    } else {
                        if dotscount > 0 && string == "." {
                            return false
                        } else {
                            return true
                        }
                    }
                } else {
                    return false
                }
            }
        }

不要忘记设置textField.delegate = self(在你的情况下是numberInput.delegate = selfviewDidLoad()并添加UITextFieldDelegate为你的 viewController 类的协议(你的情况是class ViewController: UIViewController, UITextFieldDelegate

此方法将替换所有字符,除了(1234567890 和一个“.”)

您可以像这样将 numberInput.text 获取为 Int 或 FloatInt(numberInput.text)!Float(numberInput.text)!


推荐阅读