2016-09-24 93 views
0

NSDecimalNumber中有一個方法來舍入數字I.E.舍入十進制

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) 

現在我已經切換到Decimal,它似乎並沒有有數字的舍入像NSDecimalNumber有方法。我是否應該將其轉換爲NSDecimalNumber並將其轉換回Decimal只是爲了四捨五入,或者是否有更好更優雅的舍入Decimal的方法?

編輯:做一個更好的例子

回答

0

Decimal已成爲斯威夫特3處理十進制數的簡單和簡潔的方式,但如果你想控制一些舍入模式或倒圓規模,您需要使用NSDecimal...函數。

Foundation Functions

小數一部分。

NSDecimalRound(_:_:_:_:)

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

這似乎與我在我的例子中所做的相似,除了這看起來有點短。太糟糕了,沒有內置選項來舍入'Decimal'。如果沒有其他選擇,我會在短時間內將答案留下未標記,然後我將其標記爲已回答,謝謝! –

+0

@HennyLee,國際海事組織,這可能還不是什麼東西(至少我希望如此),因爲寫一個包括「舍入(...)在內的」十進制「的擴展名是非常容易的。爲了加速蘋果的發展,最好發送[功能請求](http://developer.apple.com/bug-reporting/)。 – OOPer

0

很簡單

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

在你的榜樣,'x'是'Double'。如果'x'是一個'Decimal',它將不起作用。不過,我應該用我的例子更清楚。使用'Int'會湊整沒有任何小數。 –

+0

如果你需要小數部分,你可以使用「let x = 1.23556789 let y = Double(round(1000 * x)/ 1000) print(y)」 – Ragul

+0

但我不認爲使用'Double'是一個好方法處理小數,尤其是涉及到貨幣。感謝您的幫助。 –