2016-01-21 12 views
18

Come arrotondare lo currentRatio con due cifre decimali?Arrotondare il doppio al 2 decimale

let currentRatio = Double (rxCurrentTextField.text!)!/Double (txCurrentTextField.text!)! 
railRatioLabelField.text! = "\(currentRatio)" 
+0

vuoi per proprio dietro 'currentRatio' a due cifre decimali, o sempre Round up? Es: vuoi 3.141 -> 3.14 o 3.141 -> 3.14? – JAL

+0

Ciao JAL, voglio 3.149 da visualizzare come 3.15. Tuttavia 3.141 dovrebbe visualizzare 3.14. Grazie –

+0

Vedere la prima parte della mia risposta per l'arrotondamento corretto. – JAL

risposta

54

Utilizzare una stringa di formato per arrotondare fino a due cifre decimali e convertire il double ad un String:

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

Esempio:

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

Se si vuole arrotondare il vostro ultimo posizione decimale, si potrebbe fare qualcosa di simile (grazie Phoen1xUK):

let myDouble = 3.141 
let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15" 
+0

Deve essere 3.15 se l'arrotondamento fino a due cifre decimali. –

+0

Ho pensato che l'OP volesse solo arrotondare a due cifre decimali, arrotondando per eccesso o per difetto, se necessario. Ho appena aggiunto un commento per chiedere chiarimenti. – JAL

+0

Ciao Jal, grazie, ho usato la tua risposta che ha funzionato con una leggera modifica come segue: - _ = Double (rxCurrentTextField.text!)!/Double (txCurrentTextField.text!)! railRatioLabelField.text! = Stringa (formato: "% .2f", currentRatio) –

1

Aggiungendo alla risposta di cui sopra, se vogliamo doppio formato più volte, siamo in grado di utilizzare l'estensione del protocollo di Double come di seguito:

extension Double { 
    var dollarString:String { 
     return String(format: "$%.2f", self) 
    } 
} 

let a = 45.666 

print(a.dollarString) //will print "$45.67" 
+0

Non dovrebbe essere stampato (a.dollarString)? – glm4

0

considerare l'utilizzo di NumberFormatter per questo scopo, essa fornisce una maggiore flessibilità, se si desidera stampare il segno percentuale del rapporto o se hai cose come valuta e numeri grandi.

let amount = 10.000001 
let formatter = NumberFormatter() 
formatter.numberStyle = .decimal 
formatter.maximumFractionDigits = 2 
let formattedAmount = formatter.string(from: amount as NSNumber)! 
print(formattedAmount) // 10 
0
String(format: "%.2f", Double(round(1000*34.578)/1000)) 

uscita: 34.58

0

Il codice per le cifre specifiche dopo decimali è:

var roundedString = String(format: "%.2f", currentRatio) 

Qui l'% .2f dice la rapida per rendere questo numero arrotondato a 2 cifre decimali .

0

Aggiornato a SWIFT 4 e la risposta corretta per la domanda

Se si desidera arrotondare fino a 2 cifre decimali si dovrebbe moltiplicare per 100, allora tondo fuori e poi dividere per 100

var x = 1.5657676754 
var y = (x*100).rounded()/100 
print(y) // 1.57 
0

linea Just singolo di codice:

let obj = self.arrayResult[indexPath.row] 
let str = String(format: "%.2f", arguments: [Double((obj.mainWeight)!)!]) 
Problemi correlati