SwiftでFloat
をInt
に変換したいです。 Objective-Cのfloat
sやint
sとは異なり、これらの型はプリミティブではないため、このような基本的なキャストは機能しません
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)
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です。
後者の場合、これは珍しいように思えるかもしれませんが、暗黙的な変換がないので意味的により明確になっています。
変換は簡単です:
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
このような:
var float:Float = 2.2 // 2.2
var integer:Int = Int(float) // 2 .. will always round down. 3.9 will be 3
var anotherFloat: Float = Float(integer) // 2.0
Float初期化メソッドにfloatを渡すことでfloatの整数表現を得ることができます。
例:
Int(myFloat)
小数点以下の数字はすべて損失になることに注意してください。つまり、3.9は3のInt、8.99999は8の整数です。
関数スタイル変換を使用します(「 The Swift Programming Language。 」の「整数と浮動小数点の変換」セクションにあります)。
1> Int(3.4)
$R1: Int = 3
次のようにしてcastと入力できます。
var float:Float = 2.2
var integer:Int = Int(float)
型キャストを使用するだけです
var floatValue:Float = 5.4
var integerValue:Int = Int(floatValue)
println("IntegerValue = \(integerValue)")
整数値= 5は、小数点が失われることを意味します。
var i = 1 as Int
var cgf = CGFLoat(i)
Float値を"X"
に格納し、整数値を"Y"
に格納しているとします。
Var Y = Int(x);
または
var myIntValue = Int(myFloatValue)
var floatValue = 10.23
var intValue = Int(floatValue)
float
からInt
に変換するにはこれで十分です。