2015-07-14 10 views
6

Ich versuche, die dezimalen und ganzzahligen Teile eines Double in Swift zu trennen. Ich habe eine Reihe von Ansätzen versucht, aber sie laufen alle in der gleichen Ausgabe ...Erhalte den Dezimalteil eines Double in Swift

let x:Double = 1234.5678 
let n1:Double = x % 1.0   // n1 = 0.567800000000034 
let n2:Double = x - 1234.0  // same result 
let n3:Double = modf(x, &integer) // same result 

Gibt es eine Möglichkeit 0,5678 zu bekommen statt ,567800000000034 ohne auf eine Zeichenfolge, die der Anzahl Umwandlung?

+0

sehen: http://stackoverflow.com/q/588004/1630618 – vacawama

Antwort

7

Ohne sie Konvertierung in einen String, können Sie wie folgt auf eine Reihe von Dezimalstellen aufrunden:

let x:Double = 1234.5678 
let numberOfPlaces:Double = 4.0 
let powerOfTen:Double = pow(10.0, numberOfPlaces) 
let targetedDecimalPlaces:Double = round((x % 1.0) * powerOfTen)/powerOfTen 

Ihr Ausgang wäre

0,5678

+2

Danke für die Antwort. Das ist gut, aber leider funktioniert es nicht für mich, weil ich die entsprechende Anzahl von Stellen im Code vorher nicht kenne. Ich denke, ich muss durch Strings konvertieren: -/ – user3925713

8

Verwenden Float da es weniger Präzision Ziffern als Double

let x:Double = 1234.5678 
let n1:Float = Float(x % 1)   // n1 = 0.5678 
+0

Für die Person, die Downvoted, könnten Sie einen Grund angeben, warum Sie bitte denke, das ist eine schlechte Antwort? – Ahmad

+0

Durch die Umwandlung in 'Float' werfen Sie einfach mehr Informationen ohne Nutzen aus: das wird eine * weniger * genaue Antwort geben (' 0,567799985408782958984375' statt '0,567800000000033833202905952930450439453125'). –

+0

@MarkDickinson ist das nicht, was das OP erreichen wollte? – Ahmad

6

Swift 2:

können Sie verwenden:

modf(x).1 

oder

x % floor(abs(x)) 
22

Sie truncatingRemainder und 1 als Teiler verwenden können.

Gibt den Rest dieses Wertes dividiert durch den gegebenen Wert zurück, indem die Division abgeschnitten wird.

Apple doc

Beispiel:

let myDouble1: Double = 12.25 
let myDouble2: Double = 12.5 
let myDouble3: Double = 12.75 

let remainder1 = myDouble1.truncatingRemainder(dividingBy: 1) 
let remainder2 = myDouble2.truncatingRemainder(dividingBy: 1) 
let remainder3 = myDouble3.truncatingRemainder(dividingBy: 1) 

remainder1 -> 0.25 
remainder2 -> 0.5 
remainder3 -> 0.75 
+0

fantastische Antwort, danke! – Fattie

+0

einfach und präzise – DazChong

Verwandte Themen