web-dev-qa-db-ja.com

Swiftでfloatからintに変換

SwiftでFloatIntに変換したいです。 Objective-Cのfloatsやintsとは異なり、これらの型はプリミティブではないため、このような基本的なキャストは機能しません

var float: Float = 2.2
var integer: Int = float as Float

しかし、これは以下のエラーメッセージを生成します。

'Float'は 'Int'に変換できません

FloatからIntへプロパティ変換する方法をお考えですか?

183
kev

SwiftでFloatIntに変換するには、次のようにします。

var myIntValue:Int = Int(myFloatValue)
println "My value is \(myIntValue)"

@ paulmのコメントでこの結果を達成することもできます。

var myIntValue = Int(myFloatValue)
304
iPatel

明示的な変換

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です。

後者の場合、これは珍しいように思えるかもしれませんが、暗黙的な変換がないので意味的により明確になっています。

103
user3675131

変換は簡単です:

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
        }
    }
}

これが誰かに役立つことを願っています

26
Artyom Razinov

正確に数値を丸める方法はたくさんあります。 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
22
Borut Tomazin

このような:

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
5
Logan

Float初期化メソッドにfloatを渡すことでfloatの整数表現を得ることができます。

例:

Int(myFloat)

小数点以下の数字はすべて損失になることに注意してください。つまり、3.9は3のInt、8.99999は8の整数です。

5
A'sa Dickens

関数スタイル変換を使用します(「 The Swift Programming Language。 」の「整数と浮動小数点の変換」セクションにあります)。

  1> Int(3.4)
$R1: Int = 3
3
cobbal

次のようにしてcastと入力できます。

 var float:Float = 2.2
 var integer:Int = Int(float)
1
CNU

型キャストを使用するだけです

 var floatValue:Float = 5.4
 var integerValue:Int = Int(floatValue)

 println("IntegerValue = \(integerValue)")

整数値= 5は、小数点が失われることを意味します。

1
pravin salame
var i = 1 as Int

var cgf = CGFLoat(i)
0
Caledonia

Float値を"X"に格納し、整数値を"Y"に格納しているとします。

Var Y = Int(x);

または

var myIntValue = Int(myFloatValue)
var floatValue = 10.23
var intValue = Int(floatValue)

floatからIntに変換するにはこれで十分です。

0
Daya Kevin