2015-07-04 8 views
11

Sto cercando di arrotondare un doppio fino ad un numero intero,Swift arrotondamenti doppio

var numberOfBottles = totalVolume/volumeEachBottles 

per esempio numberOfBottles = 275.0/250.0 che mi avrebbe dato 1.1, ho bisogno di arrotondare fino a 2

+0

Vuoi l'Int 2 o il doppio 2.0? – BallpointBen

risposta

-4
func round(value: Double) -> Int { 
    var d : Double = value - Double(Int(value)) 
    if d > 0.0 { 
     return Int(value) + 1 
    } else { 
     return Int(value) 
    } 
} 
+0

Converte il risultato in un 'Int'. Non è chiaro se questo è ciò che è necessario. – nhgrif

+0

Qual è il significato di "intero" nel tuo dizionario? – NiVeR

+0

E se passassimo il valore in un metodo che si aspetta un 'Double' o lo imposta su una proprietà' Double'. Convertire in un 'Int' solo per riconvertire in un' Double' non è un ottimo percorso. – nhgrif

10

C'è una funzione globale integrata denominata ceil che fa esattamente questo:

var numberOfBottles = ceil(totalVolume/volumeEachBottles) 

Restituisce 2, come Double.

enter image description here

ceil è in realtà dichiarato in math.h e documentato here in the OS X man pages. È quasi sicuramente più efficiente di qualsiasi altro approccio.

Anche se avete bisogno di un Int come risultato finale, vorrei iniziare calcolando ceil come questo, e quindi utilizzando il costruttore Int sul risultato del calcolo ceil.

+0

Non è integrato, devi 'import Foundation' per usarlo. – BallpointBen

18

Prova:

var numberOfBottles = totalVolume/volumeEachBottles 
numberOfBottles.rounded(.up) 

o

numberOfBottles.rounded(.down) 
1
import Foundation 

var numberOfBottles = 275.0/250.0 
var rounded = ceil(numberOfBottles)