2016-03-11 15 views
5

W moim szybkim programie, mam naprawdę dużą liczbę dziesiętną (na przykład 17.9384693864596069567) i chcę skrócić dziesiętny do kilku miejsc po przecinku (więc chcę, aby wyjście było 17.9384) . Robię , a nie chcę zaokrąglić liczbę do 17.9385. Jak mogę to zrobić?Jak obcinać miejsca dziesiętne do x miejsc w Swift

Pomoc jest doceniana!

Uwaga: Nie jest to duplikat, ponieważ do wykonania niektórych z tych funkcji zastosowano bardzo starą wersję wersji SWIFT. Ponadto używają liczb zmiennoprzecinkowych i liczb całkowitych, podczas gdy ja mówię o podwójnych. A ich pytania/odpowiedzi są znacznie bardziej skomplikowane.

+1

Możliwy duplikat http://stackoverflow.com/questions/24051314/precision-string-format-specifier-in-swift – dokun1

+0

Każde z poniższych rozwiązań jest całkowicie skuteczne. – owlswipe

+0

Jasne, właśnie pokazywałam ci następną :) – dokun1

Odpowiedz

15

Można to posprzątać jeszcze bardziej, przez co jej przedłużenie Double

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

i używać go jak ten

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

Podoba mi się! Tak zorganizowany i ma sens, kiedy go używasz :). – owlswipe

+2

Cieszę się, że to lubisz - to pierwsze rozszerzenie, jakie kiedykolwiek napisałem, więc obaj nauczyliśmy się czegoś dzisiaj :-) – Russell

+2

To nie działa na numery poniżej 1 :( Jeśli użyjesz '0.23456789.cięgo (2)' dostaniesz '0.23000000000000001'' –

3

Wymyśliłem to.

Wystarczy piętro (zaokrąglić w dół) liczbę, z fantazyjnymi sztuczkami.

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 

więc pomnożyć przez 1, a liczba 0s będących miejsc po przecinku chcesz, że podłoga i podzielić ją przez co pomnożone przez. I voila.

1

Kod dla konkretnych cyfr po przecinku jest:

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

Tutaj% .4f mówi swiftowi, aby zaokrąglić tę liczbę do 4 miejsc dziesiętnych.

+0

Wygląda na to, że będzie działało dobrze, jeśli szukasz String jako wyjścia zamiast Double. – owlswipe

+1

@owlswipe Jeśli chcesz podwójny numer, możesz użyć tego kodu: ' Double (String (format: "% .2f", b)) ' –

+0

Dobre połączenie, w ten sposób wygląda mi dobrze :) – owlswipe

Powiązane problemy