Swiftでa Float
をに変換したいInt
。Objective-Cのfloat
sとは異なり、これらのタイプはプリミティブではないため、このような基本的なキャストは機能しません。int
var float: Float = 2.2
var integer: Int = float as Float
ただし、次のエラーメッセージが表示されます。
「Float」は「Int」に変換できません
プロパティをどのように変換Float
するのInt
ですか?
Swiftでa Float
をに変換したいInt
。Objective-Cのfloat
sとは異なり、これらのタイプはプリミティブではないため、このような基本的なキャストは機能しません。int
var float: Float = 2.2
var integer: Int = float as Float
ただし、次のエラーメッセージが表示されます。
「Float」は「Int」に変換できません
プロパティをどのように変換Float
するのInt
ですか?
回答:
あなたはこのようにSwiftで変換Float
することができますInt
:
var myIntValue:Int = Int(myFloatValue)
println "My value is \(myIntValue)"
@paulmのコメントでこの結果を達成することもできます。
var myIntValue = Int(myFloatValue)
var myIntValue = Int(myFloatValue)
動作します。
Intに変換すると、精度が失われます(実質的に切り捨てられます)。数学ライブラリにアクセスすることで、明示的な変換を実行できます。例えば:
あなたはしたい場合は、ラウンドダウンして整数に変換します。
let f = 10.51
let y = Int(floor(f))
結果は10です。
切り上げて整数に変換したい場合:
let f = 10.51
let y = Int(ceil(f))
結果は11です。
最も近い整数に明示的に 丸めたい場合
let f = 10.51
let y = Int(round(f))
結果は11です。
後者の場合、これは不自然に見えるかもしれませんが、暗黙的な変換がないため、意味的には明確です...たとえば、信号処理を行う場合は重要です。
round(10.5) == 11.0
変換は簡単です:
let float = Float(1.1) // 1.1
let int = Int(float) // 1
しかし、それは安全ではありません:
let float = Float(Int.max) + 1
let int = Int(float)
素敵なクラッシュが原因でしょう:
fatal error: floating point value can not be converted to Int because it is greater than Int.max
だから私はオーバーフローを処理する拡張機能を作成しました:
extension Double {
// If you don't want your code crash on each overflow, use this function that operates on optionals
// E.g.: Int(Double(Int.max) + 1) will crash:
// fatal error: floating point value can not be converted to Int because it is greater than Int.max
func toInt() -> Int? {
if self > Double(Int.min) && self < Double(Int.max) {
return Int(self)
} else {
return nil
}
}
}
extension Float {
func toInt() -> Int? {
if self > Float(Int.min) && self < Float(Int.max) {
return Int(self)
} else {
return nil
}
}
}
これが誰かを助けることを願っています
数値を正確に丸める方法はたくさんあります。最終的には、Swiftの標準ライブラリメソッドrounded()
を使用して、浮動小数点数を必要な精度で丸める必要があります。
ラウンドへのアップの使用.up
ルール:
let f: Float = 2.2
let i = Int(f.rounded(.up)) // 3
ラウンドにダウンを使用し.down
たルール:
let f: Float = 2.2
let i = Int(f.rounded(.down)) // 2
最も近い整数に丸めるには、次の.toNearestOrEven
ルールを使用します。
let f: Float = 2.2
let i = Int(f.rounded(.toNearestOrEven)) // 2
次の例に注意してください。
let f: Float = 2.5
let i = Int(roundf(f)) // 3
let j = Int(f.rounded(.toNearestOrEven)) // 2
floatをInteger初期化メソッドに渡すことにより、floatの整数表現を取得できます。
例:
Int(myFloat)
小数点以下の数値はすべて失われることに注意してください。つまり、3.9は3のIntで、8.99999は8の整数です。
関数形式の変換を使用します(「Swiftプログラミング言語」の「整数と浮動小数点の変換」セクションにあります。 [iTunesリンク])
1> Int(3.4)
$R1: Int = 3
float値をに"X"
格納し、integer値をに格納するとします"Y"
。
Var Y = Int(x);
または
var myIntValue = Int(myFloatValue)
as
オペレータは、サブクラスへのダウンキャストのためです。例:UIView as UIButton