2015-06-26 14 views
10

Nie mogę znaleźć żadnych zasobów na ten temat i próbowałem różnych rzeczy, ale nic nie działa.Jak zaokrąglić NSDecimalNumber w szybkim?

Według dokumentacji Apple, zaokrąglić się NSDecimalNumber tak:

NSDecimalNumber.decimalNumberByRoundingAccordingToBehavior(<#behavior: NSDecimalNumberBehaviors?#>) 

trwa w NSDecimalNumberBehavior, który jestem pewien sposób manipulować, ponieważ (1) nie może być rozpoczęte do zmiennej i mieć zmieniono właściwości i (2) metoda roundingMode() zgodnie z dokumentacją nie pobiera żadnych parametrów, ale Xcode wypełnia przestrzeń parametru dla "self".

Jestem całkowicie zagubiony w tej sprawie. Powrót do podstawowego pytania; Jak mogę zaokrąglić NSDecimalNumber w szybkim?

góry dzięki

+0

NSDecimalNumber.decimalNumberByRoundingAccordingToBehavior: nie jest metodą klasy. Oznacza to, że możesz wywołać liczbę dziesiętną, aby uzyskać zaokrągloną wartość. –

Odpowiedz

7

można zrobić to tak

let x = 5 
let y = 2 
let total = x.decimalNumberByDividingBy(y).decimalNumberByRoundingAccordingToBehavior(NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundUp, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)) 
+1

Jak manipulowanie ciągami i inne rzeczy w Swift, czy ktoś jeszcze jest zaniepokojony tym, ile kodu jest wymagane, aby to zrobić? – NullHypothesis

7

NSDecimalNumberBehaviors jest protokołema tym samym nie może być instancja. Potrzebujesz obiektu klasy zgodnego z protokołem. Jabłko zapewnia klasę NSDecimalNumberHandler do tego celu, np .:

let handler = NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundBankers, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false) 
let rounded = dec.decimalNumberByRoundingAccordingToBehavior(handler) 

scale argumentem jest liczba miejsc po przecinku chcesz, to znaczy 0 rundy do liczby całkowitej.

+0

Korzystanie z defaultDecimalNumberHandler nie wydaje się zaokrąglać. Czy możesz podać przykład? – Naldhelaan

+0

@Naldhelaan Mój problem dotyczący domyślnego programu obsługi, zobacz przykład jak utworzyć własny. – Arkku

1
// get a decimal num from a string 

let num = NSDecimalNumber.init(string: numStr) 

// create an NSDecimalNumberHandler instance 

let behaviour = NSDecimalNumberHandler(roundingMode:.RoundUp, 
scale: 1, raiseOnExactness: false, 
raiseOnOverflow: false, raiseOnUnderflow: 
false, raiseOnDivideByZero: false) 

// pass the handler to the method decimalNumberByRoundingAccordingToBehaviour. 

// This is an instance method on NSDecimalNumber that takes an object that 
// conforms to the protocol NSDecimalNumberBehaviors, which NSDecimalNumberHandler does! 

let numRounded = num.decimalNumberByRoundingAccordingToBehavior(behaviour)