web-dev-qa-db-ja.com

double値が整数かどうかを確認する-Swift

二重定義された変数がその値を失うことなくIntに変換可能かどうかを確認する必要があります。これらは異なるタイプであるため、これは機能しません。

if self.value == Int(self.value)

ここで、self.valueはdoubleです。

38
Youssef Moawad

Double値を「フロアリング」してから、変更されていないかどうかを確認してください。

let dbl = 2.0
let isInteger = floor(dbl) == dbl // true

整数でない場合は失敗します

let dbl = 2.4
let isInteger = floor(dbl) == dbl // false
67
ColinE

% 1はゼロです。

スウィフト3:

let dbl = 2.0
let isInteger = dbl.truncatingRemainder(dividingBy: 1) == 0

Swift 2:

let dbl = 2.0
let isInteger = dbl % 1 == 0
44
rintaro

スイフト3

if dbl.truncatingRemainder(dividingBy: 1) == 0 {
  //it's an integer
}
18
William T.

これを確認するための小さな拡張機能:

extension FloatingPoint {
    var isInt: Bool {
        return floor(self) == self
    }
}

それからただやる

let anInt = 1.isInt
let nonInt = 3.142.isInt
4
Ciprian Rarau

シンプルなソリューション

値をIntに変換してからDoubleに変換し、新しい値を確認することをお勧めします

if value == Double(Int(value)) {
// The value doesn't have decimal part. ex: 6.0

} else {
//  The value has decimal part. ex: 6.3

}
3
Musa almatri

DoubleをInt(小数点を切り捨てる)に変換してからDoubleに戻し、それを元のDoubleと比較してみてはどうでしょうか。例えば:

var dbl:Double = 22/3
dbl == Double(Int(dbl))
// false: dbl = 7.33333... Double(Int(dbl)) = 7.0

dbl = 25
dbl == Double(Int(dbl))
// true: dbl = 25.0, Double(Int(dbl)) = 25.0
1
Gallaugher

Mod(%)を使用しても機能しなくなります。

使用できるようになりました:

let dbl = 2.0
let isInteger = dbl.truncatingRemainder(dividingBy: 1.0) == 0.0
1
Chad