나는를 변환 할 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
}
}
}
나는 이것이 누군가를 도울 수 있기를 바랍니다.
답변
숫자를 정확하게 반올림하는 방법은 많이 있습니다. rounded()
부동 소수점을 원하는 정밀도로 반올림 하려면 swift의 표준 라이브러리 방법 을 사용해야 합니다.
라운드 업 사용 .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를 Integer initializer 메소드에 전달하여 float의 정수 표현을 얻을 수 있습니다.
예:
Int(myFloat)
소수점 뒤의 숫자는 손실됩니다. 즉, 3.9는 3의 정수이고 8.99999는 8의 정수입니다.
답변
함수 스타일 변환을 사용하십시오 ( ” Swift Programming Language. “[iTunes 링크]의 “정수 및 부동 소수점 변환”섹션에 있음 )
1> Int(3.4)
$R1: Int = 3