2016-09-24 8 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?

EDIT: сделал лучший пример

ответ

0

Decimal стал простым и лаконичным способом обработки десятичных чисел в Swift 3, но если вы хотите контролировать какой-то режим округления или закругление масштаб, вам нужно использовать функции NSDecimal....

Foundation Functions

См Decimals часть.

NSDecimalRound(_:_:_:_:)

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

Похоже на то, что я сделал в моем примере, за исключением того, что это выглядит немного короче. Жаль, что нет встроенной опции для округления «Десятичная». Я оставлю ответ немаркированным на короткое время, если нет другой альтернативы, тогда я отмечу это как ответ, спасибо! –

+0

@HennyLee, IMO, это может быть своего рода не все-таки вещь (по крайней мере, я надеюсь, что так), поскольку запись расширений для 'Decimal', включая' rounding (...) ', очень просто. Чтобы ускорить движение Apple к нему, лучше отправьте [запрос функции] (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

Но я не думаю, что использование «Двойного» - это хороший способ обработки десятичных знаков, особенно когда дело касается валюты. Спасибо за помощь. –