接受小数

时间:2016-02-16 14:06:11

标签: ios swift math

我正在尝试创建一个可以输入高度和比例的应用程序,它会计算区域等等。但是当我输入4,2或4.2时,它会崩溃或说不好执行。我尝试了不同的方法,但我可能做错了。我试过Float和Double而没有运气。我将非常感谢任何帮助。

let atext: Int? = Int(radien.text!)
let btext: Int? = Int(höjden.text!)
let ctext: Int? = Int(sidan.text!)

let myInt = (atext! * atext!)
let tre = 3

let myInt2 = Double(myInt) * Double(M_PI) * Double(btext!)

let result = Float(myInt2) / Float(tre)
volymenSvar.text = "\(result)"

3 个答案:

答案 0 :(得分:1)

你的问题是你的力量展开aText并失败了。

aText被定义为Int(radien.text!),可能会失败两次(radien.text!可能会失败,而其作为Int的转换也可能会失败)

如果将这些文本强制转换为Double以允许使用十进制数,该怎么办?此外,您应该使用条件绑定,如下例所示:

在你的函数中输入以下代码:

guard let radien = radien.text, höjden = höjden.text, sidan = sidan.text else { return }

let atext: Double? = Double(radien)
let btext: Double? = Double(höjden)
let ctext: Double? = Double(sidan)

if let a = atext, b = btext, c = ctext {
    let myInt = (a * a)
    let tre = 3

    let myInt2 = Double(myInt) * Double(M_PI) * Double(b)

    let result = Float(myInt2) / Float(tre)
    print("\(result)")
}

如果textFields中没有文本,则guard语句将阻止您收到错误。

如果从文本转换为Double失败,则条件绑定(if let)将阻止您崩溃

答案 1 :(得分:0)

试试这个解决方案:

    func asd()
    {
        let atext = getNumberFromString(radien.text)
        let btext = getNumberFromString(höjden.text)
        let ctext = getNumberFromString(sidan.text)

        let myInt = (Double(atext) * Double(atext))

        let tre = 3

        let myInt2 = Double(myInt) * Double(M_PI) * Double(btext)

        let result = Float(myInt2) / Float(tre)
        volymenSvar.text = "\(result)"
    }

    func getNumberFromString(string:String?) -> NSNumber
    {
        var result:NSNumber = 0
        if let aString = string
        {
            let formattedString = aString.stringByReplacingOccurrencesOfString(",", withString: ".")
            let formatter = NSNumberFormatter.init()
            let number:NSNumber? = formatter.numberFromString(formattedString)
            if let aNumber = number
            {
                result = aNumber
            }
        }
        return result
    }

答案 2 :(得分:-1)

为什么不喜欢这个?

var atext = radien.text.floatValue
var btext = höjden.text.floatValue
var ctext = sidan.text.floatValue

var myInt = (atext * atext)
let tre = 3

var myInt2 = myInt * Double(M_PI) * btext

var result = myInt2 / tre
volymenSvar.text = "\(result)"