2015-07-21 10 views
8

Ich möchte ein Double auf eine bestimmte Anzahl von Dezimalstellen runden immer runden.Abrunden in swift

Beispiel

-,00 Runden => 1,5679999-1,56

-0,000 Runden => 1,5679999 zu 1,567

round(1.5679999 * 100)/100 //returns 1.57 
round(1.5679999 * 1000)/1000 //returns 1.568 

möchte ich ein Doppel kein verketteten String

+0

Zu welchem ​​Zweck? Wenn es dem Benutzer angezeigt werden soll, sollten Sie stattdessen 'NSNumberFormatter' verwenden. Sie sollten sich beim Formatieren von Strings nicht auf eine beliebige Fließkomma-Genauigkeit verlassen. – mattt

+0

Da 'NSNumberFormatter' den zugrunde liegenden Wert nicht ändert, wird dem Benutzer nur eine 'Zeichenfolge' angezeigt. #ifeellikemosesontheountaintpalkingtoyou. – Mika

+0

Weitere Details: Ich entwerfe ein benutzerdefiniertes Nummernfeld mit einer Rücktaste. Wenn der Benutzer die Rücktaste drückt, erwartet er nicht nur, dass die Ziffer von dem Bildschirm verschwindet, sondern auch von dem eingegebenen Wert. So mache ich es: 'amount/= 10'' amount = floor (Betrag * 100)/100' 'refreshAmountLabel()'. Vorschläge willkommen !! – Mika

Antwort

24

Ersetzen Sie einfach round durch floor!

+2

Ich fühle mich so dumm, das nicht entdeckt zu haben ... – gnasher729

+3

'Boden (1,5679999 * 1000)/1000 == 1,5669999999999999'. Sie können einen Gleitkomma nicht teilen und multiplizieren, um seine Genauigkeit zuverlässig zu ändern. – mattt

+0

Absolut, vielen Dank, dass du das gezeigt hast! PS - Ich liebe dich, Matt! :) Ich habe mich gefragt, was du in letzter Zeit gemacht hast. Großer Respekt für all die großartigen Beiträge, die du über die Jahre zur iOS-Community geleistet hast. – Clafou

15

Ab swift 3.0:

myDouble.rounded(.down) 
+1

Manchmal kann es so einfach sein! Vielen Dank. – Lengo