2015-12-25 13 views
6

mam wynik „1.444444” i chcę, aby zaokrąglić ten wynik „1.5” jest to kod używam:okrągły podwójny do 0,5

a.text = String(round(13000/9000.0)) 

ale to runda na „1.0” i muszę runda na "1.5"

i ten kod:

a.text = String(ceil(13000/9000.0)) 

jest runda na "2.0"

+2

pomnożyć przez 2, okrągła, a następnie podzielić przez 2. – phoog

+0

przepraszam nie rozumiem, może mnie widzisz? – Tzahi

+0

czy spróbuj podłoga – trquoccuong

Odpowiedz

14
x = 13000/9000.0; 

denominator = 2; 
a.text = String(round(x*denominator)/denominator); 

Najpierw przelicz 1.444 na 2.888, a następnie zaokrąglij na 3.0, a następnie podziel przez 2, aby uzyskać 1.5. W takim przypadku mianownik 0,5 wynosi 2 (tzn. 1/2). Jeśli chcesz zaokrąglić do najbliższego kwartału (0.25,0.5, 0.75, 0.00), wówczas mianownik = 4

I Należy zwrócić uwagę, że działa to doskonale, jeśli mianownik ma potęgę 2. Jeśli tak nie jest, na przykład denominator=3 , wtedy możesz uzyskać dziwne odpowiedzi jak 1.99999999 zamiast 2 dla konkretnych wartości.

+0

tnx man to działa dobrze – Tzahi

24

Swift 3:

extension Double { 
    func round(nearest: Double) -> Double { 
     let n = 1/nearest 
     let numberToRound = self * n 
     return numberToRound.rounded()/n 
    } 

    func floor(nearest: Double) -> Double { 
     let intDiv = Double(Int(self/nearest)) 
     return intDiv * nearest 
    } 
} 

let num: Double = 4.7 
num.round(nearest: 0.5)  // Returns 4.5 

let num2: Double = 1.85 
num2.floor(nearest: 0.5)  // Returns 1.5 

Swift 2:

extension Double { 
    func roundNearest(nearest: Double) -> Double { 
     let n = 1/nearest 
     return round(self * n)/n 
    } 
} 

let num: Double = 4.7 
num.roundNearest(0.5)  // Returns 4.5 
+0

Przykład dla Swift 3 to wielkie podziękowanie, ale czy mógłbyś mi powiedzieć, jak mogę to zmienić, aby zawsze było Round Down? tj. niech num: Double = 1.85 num.round (najbliższy: 0.5) // Zwraca 2.0, ale chcę zwrócić 1,5 !!! – GameDev

+0

to byłoby kolejne pytanie ... ale zaktualizowałem swoją odpowiedź ;-) – atxe

+0

To świetnie, dziękuję, ale w końcu udało mi się to rozwiązać, gdy odkryłem funkcję podłogi :) – GameDev