web-dev-qa-db-ja.com

Swift 3:10進数から整数へ

私は次のコードで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にはDecimalIntに変換するコンストラクタとメンバー関数がないようです。
DecimalをIntにSwift 3?

25
Colin Witkamp

これは私の更新された回答です(発言してくれたMartin RとOPに感謝します)。 OPの問題は、結果から1を減算した後、pow(x: Decimal,y: Int) -> Decimal関数をIntにキャストするだけでした。私はこの NSDecimalのSO投稿Decimalに関するAppleのドキュメント の助けを借りて質問に答えました。結果を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
27
tech4242
let decimalToInt = (yourDecimal as NSDecimalNumber).intValue

または@MartinRが示唆したように:

let decimalToInt = NSDecimalNumber(decimal: yourDecimal).intValue
11
Juan Boero

投稿された回答のいずれにも問題はありませんが、頻繁に使用する必要があるシナリオの冗長性を軽減する拡張機能を提供したいと思います。

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
2
CodeBender