2016-09-24 5 views
0

In NSDecimalNumber gibt es eine Methode zum Runden der Zahl, I.E.Rundung Dezimal

let handler = NSDecimalNumberHandler(roundingMode: .plain, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false) 

let example: NSDecimalNumber = 1.345 
let rounded: NSDecimalNumber = example.rounding(accordingToBehavior: handler) 

Jetzt habe ich zu Decimal geschaltet und es scheint nicht, das Verfahren zu haben, die Zahl abzurunden wie NSDecimalNumber hat. Soll ich es in NSDecimalNumber umwandeln und es zurückwerfen, um nur Decimal zu runden, oder gibt es eine bessere und elegantere Weise, eine Decimal zu runden?

EDIT: hat ein besseres Beispiel

Antwort

0

Decimal eine einfache und übersichtliche Art und Weise in Swift Dezimalzahlen zu behandeln 3 geworden ist, aber wenn Sie etwas Rundungsmodus steuern möchten oder Rundung Maßstab, müssen Sie NSDecimal... Funktionen verwenden.

Foundation Functions

Siehe Decimals Teil.

NSDecimalRound(_:_:_:_:)

var dexample: Decimal = 1.345 
var drounded: Decimal = Decimal() 
NSDecimalRound(&drounded, &dexample, 2, .plain) 
print(drounded) //->1.35 
+0

Es scheint ähnlich zu dem, was ich in meinem Beispiel getan habe, außer das sieht ein bisschen kürzer aus. Schade, dass es keine eingebaute Option zum Runden eines Decimal gibt. Ich lasse die Antwort für eine kurze Zeit unmarkiert, wenn es keine andere Alternative gibt, dann werde ich das als beantwortet markieren, danke! –

+0

@HennyLee, IMO, das mag eine Art von noch-nicht-Ding sein (zumindest hoffe ich das), wie das Schreiben einer Erweiterung für 'Dezimal' einschließlich' Runden (...) 'superleicht ist. Um Apples Bewegung dorthin zu beschleunigen, senden Sie besser eine [feature request] (http://developer.apple.com/bug-reporting/). – OOPer

0

Es ist einfach

let x = 1.23556789 
let y = Int(round(x)) 
print(y) 
+0

In Ihrem Beispiel 'X' ist ein 'Double'. Wenn 'x' ein' Decimal' ist, wird es nicht funktionieren. Trotzdem hätte ich mit meinem Beispiel klarer werden sollen. Die Verwendung von "Int" würde ohne Dezimalstellen aufgerundet werden. –

+0

Wenn Sie Dezimalteil benötigen können Sie "let x = 1,23556789 lassen y = Double (rund (1000 * x)/1000) print (y)" – Ragul

+0

Aber ich glaube nicht, mit 'Double' ist ein guter Weg der Umgang mit Dezimalzahlen, besonders wenn es um die Währung geht. Danke für die Hilfe. –