2015-12-25 5 views
6

ich habe ein Ergebnis „1,444444“ und ich möchte, um dieses Ergebnis runden auf „1.5“ Dies ist der Code, den ich verwenden:rund doppelt bis 0,5

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

aber dies ist rund um „1,0“ und ich brauche Runde "1.5"

und dieser Code:

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

ist rund um "2,0"

+2

mit 2 multiplizieren, rund, und dann durch 2 teilen – phoog

+0

leider nicht verstehen, können Sie mich sehen? – Tzahi

+0

versuchen Sie Boden – trquoccuong

Antwort

14
x = 13000/9000.0; 

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

Zuerst 1.444 in 2.888 konvertieren, dann auf 3.0 runden und dann durch 2 teilen, um 1.5 zu erhalten. In diesem Fall ist der Nenner von 0,5 2 (d. H. 1/2). Wenn Sie zum nächsten Quartal runden möchten (0.25,0.5, 0,75, 0,00), dann Nenner = 4

Ich mag darauf hinweisen, dass dies funktioniert perfekt, wenn der Nenner eine Potenz von 2 ist, wenn dies nicht der Fall, sage denominator=3 , dann können Sie seltsame Antworten wie 1.99999999 anstelle von 2 für bestimmte Werte erhalten.

+0

tnx man es funktioniert gut – 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

Das Swift 3 Beispiel ist großartig, danke, aber bitte könntest du mir sagen, wie ich das ändern könnte, um immer abzurunden? d. .. let num: Double = 1.85 num.round (am nächsten: 0.5) // Gibt 2.0 zurück aber ich möchte 1.5 zurückgeben !!! – GameDev

+0

das wäre eine andere Frage ... aber ich habe meine Antwort aktualisiert ;-) – atxe

+0

Das ist großartig, danke, aber am Ende habe ich es geschafft, es auszuarbeiten, sobald ich die Bodenfunktion entdeckt habe :) – GameDev