Kotlin基础
基本数据类型
1、整数
类型 | 大小(bit) | 最大值 | 最小值 |
---|---|---|---|
Byte | 8 | -128 | 127 |
Short | 16 | -32768 | 32767 |
Int | 32 | -2^31 | 2^31 -1 |
Long | 64 | -2^64 | 2^64 -1 |
示例
val a = 100 //Int 自动类型推断 val b = 30000000000 //long 超过Int最大值,自动推断为Long val l = 1L //设置为Long val byte:Byte = 1 //Byte
2、浮点数
对于浮点数,Kotlin 提供了 Float 与 Double 类型。 根据
IEEE 754
标准, 两种浮点类型的⼗进制位数(即可 以存储多少位⼗进制数)不同。 Float 反映了IEEE 754
单精度,⽽ Double 提供了双精度。
类型 | 大小(bit) | 符号位 | 有效数字bit位数 | 指数bit位数 | 十进制有效位数 |
---|---|---|---|---|---|
Float | 32 | 1 | 23 | 8 | 7-8(超过8位会发生精度损失) |
Double | 63 | 1 | 52 | 11 | 16-17(超过17位会发生精度损失) |
对于以⼩数初始化的变量,编译器会推断为 Double 类型。 如需将⼀个值显式指定为 Float 类型,请添加 f 或 F 后缀。 如果这样的值包含多于 6〜7 位⼗进制数,那么会将其舍⼊。
val pi = 3.14 //默认为Double
val a = 2.7182818284f //Float,实际值为 2.7182817(精度损失)
为何会出现精度损失?
1、拿Float举例,Float有效数字位数为24位,其中第一位为符号位,内存模型如下
计算公式:
由于有效数字位数(M)为23位(不包含符号位),所以M的最大值为 2^23 = 8388608(即1M = 1.8388608),所以Float能表示的十进制的最大有效位数为8位(不是所有的8位都能表示),所以说Float的十进制有效位数为7-8位。更详细解析可查看:
2、由于阶数跳跃导致的精度误差,可参考资料