如果你将整型与浮点型一起使用,结果将被认为是Double类型:
et anotherPi = 3 + 0.14159
// anotherPi 的类型是Double
上述代码中,3的值是没有明确说明类型,因此,根据剩余部分的浮点类型可以确定返回值为Double.
Numeric Literals (数值的进制表示)
整数类型可以进行如下表示:
- A decimal number, with no prefix // 十进制数值,不需要前缀符号;
- A binary number, with a 0b prefix // 二进制数值,使用0b前缀;
- An octal number, with a 0o prefix // 八进制数值,使用0o前缀;
- A hexadecimal number, with a 0x prefix //十六进制使用0x前缀;
下面代码中,所有的整型值都是十进制的17:
let decimalInteger = 17
let binaryInteger = 0b10001 // 17 in binary notation
let octalInteger = 0o21 // 17 in octal notation
et hexadecimalInteger = 0x11 // 17 in hexadecimal notation”
浮点类型的可以是十进制或者十六进制.在十进制的小数点两边必须都要有值;浮点类型也可以使用指数形式,在十进制中,指数使用大写或者小写的e表示,在十六进制中,使用大写或 者小写的p表示.
对十进制来说,使用指数exp,表示这个数值乘以10的exp次幂
1.25e2 means 1.25 × 102, or 125.0.
1.25e-2 means 1.25 × 10-2, or 0.0125.
对于十六进制数使用指数exp,表示这个数值乘以2的exp次幂
0xFp2 means 15 × 22, or 60.0.
0xFp-2 means 15 × 2-2, or 3.75.
下面代码中,所有的值都是十进制的12.1875:
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
数值的表示都可以使用扩展格式来使他们更具有可读性.整型和浮点型都可以增加0和下划线来帮助提高可读性.扩展格式不会改变数值的类型:
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
Numeric Type Conversion (数值类型转换)
在代码中,定义整型常量和整型变量,Int是通用性比较好的,即便你使用的值是非负数.使用Int这种默认的类型意味着你的代码可以快速的匹配整数值的类型.
只有当你确切的需要处理某种数值整型的时候,才推荐使用你指定的类型,因为Int类型可以自动适应扩展数据,有利于性能,内存使用和效率.
Integer Conversion (整型转换)
不同整型数值类型的常量或变量,它们的数值有效范围是不同的.Int8类型的常量或变量,数值的范围是-128到127,UInt8类型的常量或变量,数值的范围是0到255.当数值超出常量 或变量能够存储的数值范围时,代码在编译的时候会报错:
let cannotBeNegative: UInt8 = -1
// UInt8 类型不能存储负数,因此会报错
let tooBig: Int8 = Int8.max + 1
// Int8 类型不能存储超过最大值的数,
// 因此这行代码会报错.
由于每种数值的类型可以存储不同的取值范围,所以你必须有所选择的进行值的类型转换.
转换数值类型可以在初始化新值的时候使用一个已经定义过的数值.在下面的代码样例中,常量 twoThousand i的类型是UInt16,而常量one是类型UInt8,他们不可以直接进行相加运 算,因为它们不是相同的类型.然而代码中使用UInt16(one)创建一个新的UInt16类型值来替代原来的类型值.
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
这样在加号的两边数值类型都是UInt16,因此是可以进行运算的.常量 (twoThousandAndOne)的类型将会是UInt16,因为相加的两个数值是UInt16类型.
在Swift中,默认的类型初始化是使用 SomeType(ofInitialValue) 来传递一个初始值.上面的代码例子中,UInt16可以接收Uint8类型的值,因此可以使用已经定义的UInt8类型值来产生一 个新的UInt16的类型值.不可以使用任意的其他类型.
Integer and Floating-Point Conversion (整型和浮点型转换)
整型数值与浮点数值之间的转换必须进行明确的声明:
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi equals 3.14159, and is inferred to be of type Double
代码中 Double(three) 使用常量three的值来创建一个新的Double类型的值,因此加号两边的数值类型相同,可以进行运算.如果不进行转换,运算是不能执行的.
从浮点类型装整数类型,也是与上面一样.整型数值可以使用Double或者Float类型的值来进行初始化:
let integerPi = Int(pi)
// integerPi 等于 3, 类型是Int
浮点类值型转整型值,会被去掉小数部分.例如,4.75转整型是4;-3.9转换整型后是-3.
注意点
数值常量或变量的使用与数值型文本是不同的. 数值文本类型的3可以直接与数值文本类型0.14159相加,因为数值文本本身没有明显的类型声明.它们的类型只在编译处理的时候确定.