2016-03-11 10 views
5

abgeschnitten In meinem schnellen Programm habe ich eine sehr lange Dezimalzahl (sagen 17.9384693864596069567) und ich möchte die Dezimalstelle auf ein paar Dezimalstellen abgeschnitten (so möchte ich die Ausgabe 17.9384) . Ich mache nicht möchte die Nummer auf 17.9385 runden. Wie kann ich das machen?Wie Dezimalstellen auf x Plätze in Swift

Hilfe ist willkommen!

Hinweis: Dies ist kein Duplikat, weil sie eine sehr alte Version des schnellen verwenden, bevor einige dieser Funktionen vorgenommen wurden. Außerdem benutzen sie Floats und Integers, während ich über Double rede. Und ihre Fragen/Antworten sind viel komplizierter.

+1

Mögliche Duplikat http://stackoverflow.com/questions/24051314/precision-string-format-specifier-in-swift – dokun1

+0

Entweder Lösung unten ist vollständig wirksam. – owlswipe

+0

Sicher, zeigte dir nur einen anderen :) – dokun1

Antwort

15

Sie können diese aufzuräumen noch mehr, indem es eine Verlängerung von Double

extension Double 
{ 
    func truncate(places : Int)-> Double 
    { 
     return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places))) 
    } 
} 

machen und verwenden Sie es wie dieser

var num = 1.23456789 
// return the number truncated to 2 places 
print(num.truncate(2)) 

// return the number truncated to 6 places 
print(num.truncate(6)) 
+0

Ich mag es! So organisiert und es macht wirklich Sinn, wenn Sie es verwenden :). – owlswipe

+2

froh, dass Sie es mögen - es ist die erste Erweiterung ich je geschrieben haben, so haben wir beide heute etwas gelernt :-) – Russell

+2

Dies funktioniert nicht auf Zahlen unter 1 :( Wenn Sie '0.23456789.truncate (2)' Sie Ich werde '0.23000000000000001' bekommen –

3

Ich dachte mir das aus.

Gerade Boden (abgerundet) die Anzahl, mit einigen ausgefallenen Tricks.

let x = 1.23556789 
let y = Double(floor(10000*x)/10000) // leaves on first four decimal places 
let z = Double(floor(1000*x)/1000) // leaves on first three decimal places 
print(y) // 1.2355 
print(z) // 1.235 

So multiplizieren mit 1 und die Anzahl der 0er die Nachkommastellen sind Sie wollen, Boden, und es zu teilen, was Sie es multipliziert. Und voila.

1

Der Code für bestimmte Stellen nach Dezimalstellen ist:

var a = 17.9384693864596069567 
var roundedString = String(format: "%.4f", a) 

Hier ist das% .4f erzählt die raschen diese Zahl auf 4 Dezimalstellen gerundet zu machen.

+0

Das sieht aus, als würde es gut funktionieren, wenn Sie nach einer Zeichenkette als Ausgabe anstelle einer Doppelten suchen. – owlswipe

+1

@owlswipe Wenn Sie eine doppelte Zahl wünschen, können Sie diesen Code verwenden: ' Double (String (Format: "% .2f", b)) ' –

+0

Guter Anruf, so sieht für mich gut aus :) – owlswipe