这个类型的转换是给相应类加了分类,直接用点语法就可以调用。
Int转Float、Double、String:
extension Int {
func power(n: Double) -> Int {
return Int(pow(Double(self), n))
}
var float: Float {
return Float(self)
}
var double: Double {
return Double(self)
}
var string: String {
return String(self)
}
}
Float转其他类型:
extension Float {
func power(n: Float) -> Float {
return powf(self, n)
}
var int: Int {
return Int(self)
}
var double: Double {
return Double(self)
}
var string: String {
return String(self)
}
var int_ceil: Int {
return Int(ceil(self))
}
var int_round: Int {
return Int(roundf(self))
}
var int_floor: Int {
return Int(floor(self))
}
}
Double转其他类型:
extension Double {
func power(n: Double) -> Double {
return pow(self, n)
}
var int: Int {
return Int(self)
}
var string: String {
return String(self)
}
var int_ceil: Int {
return Int(ceil(self))
}
var int_round: Int {
return Int(roundf(Float(self)))
}
var int_floor: Int {
return Int(floor(self))
}
}
String类型的转换:
extension String {
var int: Int {
let d = Double(self)
let i = Int(d ?? 0)
return i
}
var float: Float {
let d = Double(self)
let f = Float(d ?? 0.0)
return f
}
var double: Double {
let d = Double(self)
return d ?? 0.0
}
}
使用方法:
//一个数的n次方
print(2.power(n: 5))
print(2.0.power(n: 2))
//对一个字符串取整,取浮点型
let s = "3223.9555555555"
print("2".int) // 2
print("2.4e".int) // 0.0 ,为什么返回的是0.0
print("2.3".float) // 2.3
print(s.int) // 3223
print(s.float) // 3223.96
print(s.double) // 3223.9555555555
// 对浮点型取整
let num1: Double = 3.92728934823
let num2: Float = 3.92
print(num1.int)
print(num1.int_floor)
print(num1.int_ceil)
print(num1.int_round)
print(num2.int_ceil)
print(num2.int_floor)
print(num2.int_round)
print(23.4.int_round)
print(s.double.int_floor)
print(s.double.int_ceil)
print("1.2d".float)
当字符串转数字时,不成功的情况下返回的是0.0,Int时返回的0。这种情况可能是字符串中出现了数字以外的字符,比如字母等等。
欢迎大家指出不足。