Swift 3: Десятичное число до Int
Я попытался преобразовать Decimal в Int с следующим кодом:
Int(pow(Decimal(size), 2) - 1)
Но я понимаю:
.swift:254:43: Cannot invoke initializer for type 'Int' with an argument list of type '(Decimal)'
Здесь я знаю, что pow возвращает Decimal
но кажется, что Int не имеет конструкторов и функций-членов для преобразования Decimal
в Int
.
Как преобразовать Decimal в Int в Swift 3?
Ответы
Ответ 1
Это мой обновленный ответ (спасибо Мартину R и OP за замечания). Задача OP заключалась в том, чтобы просто pow(x: Decimal,y: Int) → Decimal
функцию pow(x: Decimal,y: Int) → Decimal
в Int после вычитания 1 из результата. Я ответил на этот вопрос с помощью этого сообщения SO для документации NSDecimal и Apple на Decimal. Вы должны преобразовать свой результат в NSDecimalNumber, который, в свою очередь, может быть запущен в Int:
let size = Decimal(2)
let test = pow(size, 2) - 1
let result = NSDecimalNumber(decimal: test)
print(Int(result)) // testing the cast to Int
Ответ 2
let decimalToInt = (yourDecimal as NSDecimalNumber).intValue
или как @MartinR предложил:
let decimalToInt = NSDecimalNumber(decimal: yourDecimal).intValue
Ответ 3
В любом из опубликованных ответов нет ничего плохого, но я хотел бы предложить расширение, которое сокращает многословность сценариев, в которых вам нужно использовать это часто.
extension Decimal {
var int: Int {
return NSDecimalNumber(decimal: self).intValue
}
}
Чтобы назвать это:
let powerDecimal = pow(2, 2) // Output is Decimal
let powerInt = powerDecimal.int // Output is now an Int