Search code examples
swiftmathdivision

Math divison in Swift


I'm trying to make a math app with different equations and formulas but I'm trying to circle sector but i just wanted to try to divide the input value by 360 but when I do that it only says 0 unless the value is over 360. I have tried using String, Double and Float with no luck I don't know what I'm doing is wrong but down here is the code. I'm thankful for help but I have been sitting a while and searched online for an answer with no result I might have been searching with the wrong search.

if graderna.text == ""{
        }
        else{
            var myInt: Int? = Int(graderna.text!)    // conversion of string to Int
            var myInt2: Int? = Int(radien.text!)
            let pi = 3.1415926
            let lutning = 360


            let result = (Double(myInt! / lutning) * Double(pi))
            svar2.text = "\(result)"
        }

Solution

  • Your code is performing integer division, taking the integer result and converting it to a double. Instead, you want to convert these individual integers to doubles and then do the division. So, instead of

    let result = (Double(myInt! / lutning) * Double(pi))
    

    You should

    let result = Double(myInt!) / Double(lutning) * Double(pi)
    

    Note, Double already has a .pi constant, so you can remove your pi constant, and simplify the above to:

    let result = Double(myInt!) / Double(lutning) * .pi
    

    Personally, I’d define myInt and lutning to be Double from the get go (and, while we’re at it, remove all of the forced unwrapping (with the !) of the optionals):

    guard
        let text = graderna.text,
        let text2 = radien.text,
        let value = Double(text),
        let value2 = Double(text2)
    else {
        return
    }
    
    let lutning: Double = 360
    let result = value / lutning * .pi
    

    Or, you can use flatMap to safely unwrap those optional strings:

    guard
        let value = graderna.text.flatMap({ Double($0) }),
        let value2 = radien.text.flatMap({ Double($0) })
    else {
        return
    }
    
    let lutning: Double = 360
    let result = value / lutning * .pi
    

    (By the way, if you’re converting between radians and degrees, it should be 2π/360, not π/360.)