2016-03-11 32 views
5

Nel mio programma rapido, ho un numero decimale molto lungo (ad esempio 17.9384693864596069567) e voglio troncare il decimale a poche cifre decimali (quindi voglio che l'output sia 17.9384) . Io faccio non voglio arrotondare il numero a 17.9385. Come posso fare questo?Come troncare i decimali a x posti in Swift

L'aiuto è apprezzato!

Nota: questo non è un duplicato perché utilizza una versione molto vecchia di swift, prima che alcune di queste funzioni venissero eseguite. Inoltre, stanno usando float e interi, mentre sto parlando di double. E le loro domande/risposte sono molto più complicate.

+1

Possibile duplicato di http://stackoverflow.com/questions/24051314/strumento-stringa-strumento-decisione-in-swift – dokun1

+0

Ciascuna soluzione di seguito è completamente efficace. – owlswipe

+0

Certo, ti stavo solo mostrando un altro :) – dokun1

risposta

15

È possibile riordinare questo ancora di più, rendendolo un prolungamento del Double

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

e si utilizza in questo modo

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

Mi piace! Così organizzato e ha davvero senso quando lo usi :). – owlswipe

+2

contento che ti piaccia - è la prima estensione che abbia mai scritto, quindi abbiamo entrambi imparato qualcosa oggi :-) – Russell

+2

Questo non funziona sui numeri sotto 1 :( Se usi '0.23456789.truncate (2)' tu '0.23000000000000001' –

3

Ho pensato questo fuori.

Solo piano (arrotondato per difetto) il numero, con alcuni trucchi fantasiosi.

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 

Quindi, moltiplicare per 1 e il numero di 0 costituiscono il cifre decimali che si desidera, da terra che, e dividerlo per quello che moltiplicato facendo. E voilà.

1

Il codice per le cifre specifiche dopo decimali è:

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

Qui il% .4f indica allo swift di arrotondare questo numero a 4 cifre decimali.

+0

Sembra che funzionerà bene se stai cercando una stringa come output anziché Double. – owlswipe

+1

@owlswipe se vuoi il doppio numero, puoi usare questo codice: 'Double (Stringa (formato: "% .2f", b)) ' –

+0

Buona chiamata, in questo modo mi sembra soddisfacente :) – owlswipe