J'ai essayé de convertir Decimal en Int avec le code suivant:
Int(pow(Decimal(size), 2) - 1)
Mais je reçois:
.Swift:254:43: Cannot invoke initializer for type 'Int' with an argument list of type '(Decimal)'
Ici, je sais que pow renvoie un Decimal
mais il semble qu'Int n'a pas de constructeurs et de fonctions membres pour convertir Decimal
en Int
.
Comment puis-je convertir Decimal en Int en Swift 3?
Ceci est ma réponse mise à jour (merci à Martin R et au PO pour les remarques). Le problème de l'OP consistait simplement à transtyper la fonction pow(x: Decimal,y: Int) -> Decimal
en un Int après avoir soustrait 1 du résultat. J'ai répondu à la question à l'aide de ce SO post pour NSDecimal et la documentation d'Apple sur Decimal . Vous devez convertir votre résultat en NSDecimalNumber, qui peut à son tour être converti en Int:
let size = Decimal(2)
let test = pow(size, 2) - 1
let result = NSDecimalNumber(decimal: test)
print(Int(result)) // testing the cast to Int
let decimalToInt = (yourDecimal as NSDecimalNumber).intValue
ou comme @MartinR l'a suggéré:
let decimalToInt = NSDecimalNumber(decimal: yourDecimal).intValue
Il n'y a rien de mal avec l'une ou l'autre des réponses publiées, mais je voudrais proposer une extension qui réduit la verbosité des scénarios où vous devez l'utiliser fréquemment.
extension Decimal {
var int: Int {
return NSDecimalNumber(decimal: self).intValue
}
}
Pour l'appeler:
let powerDecimal = pow(2, 2) // Output is Decimal
let powerInt = powerDecimal.int // Output is now an Int