Rounding a double value to x number of decimal places in swift

前端 未结 28 2513
日久生厌
日久生厌 2020-11-22 06:11

Can anyone tell me how to round a double value to x number of decimal places in Swift?

I have:

var totalWorkTimeInHours = (totalWorkTime/60/60)
         


        
28条回答
  •  隐瞒了意图╮
    2020-11-22 06:37

    I found this wondering if it is possible to correct a user's input. That is if they enter three decimals instead of two for a dollar amount. Say 1.111 instead of 1.11 can you fix it by rounding? The answer for many reasons is no! With money anything over i.e. 0.001 would eventually cause problems in a real checkbook.

    Here is a function to check the users input for too many values after the period. But which will allow 1., 1.1 and 1.11.

    It is assumed that the value has already been checked for successful conversion from a String to a Double.

    //func need to be where transactionAmount.text is in scope
    
    func checkDoublesForOnlyTwoDecimalsOrLess()->Bool{
    
    
        var theTransactionCharacterMinusThree: Character = "A"
        var theTransactionCharacterMinusTwo: Character = "A"
        var theTransactionCharacterMinusOne: Character = "A"
    
        var result = false
    
        var periodCharacter:Character = "."
    
    
        var myCopyString = transactionAmount.text!
    
        if myCopyString.containsString(".") {
    
             if( myCopyString.characters.count >= 3){
                            theTransactionCharacterMinusThree = myCopyString[myCopyString.endIndex.advancedBy(-3)]
             }
    
            if( myCopyString.characters.count >= 2){
                theTransactionCharacterMinusTwo = myCopyString[myCopyString.endIndex.advancedBy(-2)]
            }
    
            if( myCopyString.characters.count > 1){
                theTransactionCharacterMinusOne = myCopyString[myCopyString.endIndex.advancedBy(-1)]
            }
    
    
              if  theTransactionCharacterMinusThree  == periodCharacter {
    
                                result = true
              }
    
    
            if theTransactionCharacterMinusTwo == periodCharacter {
    
                result = true
            }
    
    
    
            if theTransactionCharacterMinusOne == periodCharacter {
    
                result = true
            }
    
        }else {
    
            //if there is no period and it is a valid double it is good          
            result = true
    
        }
    
        return result
    
    
    }
    

提交回复
热议问题