变量
布尔型
布尔型数据只有true和false
- 默认值为false
- 不允许将整型强制转换为布尔型
- 布尔型无法参与数值运算,也无法与其他类型进行转换
var ifTrue = true
fmt.Printf("%v--%T", ifTrue, ifTrue)
整型
var num1 int = 10
fmt.Printf("num=%v 类型:%T", num1, num1)
var num2 int8 = 100
// 用unsafe.Sizeof()查看不同长度的整型在内存里面的存储空间
fmt.Println(unsafe.Sizeof(num2))
不同的整型位数
数字字面量语法
%d, 表示10进制输出 %b, 表示2进制输出 %o, 表示8进制输出 %x, 表示16进制输出
num := 10
fmt.Printf("num=%v 类型:%T", num, num)
浮点型
var a float32 = 3.14 // 这里创建32位浮点数。64位系统中默认会创建64位浮点数
fmt.Printf("值: %v--%f--%.2f, 类型%T", a,a,a,a)
// %.2f表示保留两位小数
f1 := 3.13
fmt.Println(unsafe.Sizeof(f1)) // 64
// 科学计数法表示
var f2 float32 = 3.14e2 // 3.14*10^2
var f3 float32 = 3.14e-2 // 3.14*10^-2,也就是3.14除10^2
// 低阶转高阶
var a1 float32 = 23.4
a2 := float64(a1)
fmt.Printf("a1的类型是%T, a2的类型是%T", a1, a2)
精度丢失
d := 1129.6
fmt.Println((d*100)) // 输出: 112959.9999999999
定长条件下,二进制小数和十进制小数互转可能有精度丢失。可使用第三方包(decimal)解决。
var num1 float64 = 3.1
var num2 float64 = 4.2
d1 := decimal.NewFromFloat(num1).Add(decimal.NewFromFloat(float64(num2)))
fmt.Println(d1)
int转float
a := 10
b := float64(a)
fmt.Printf("a的类型是%T, b的类型是%T", a,b)
float转int
var a float32 = 23.3
b := int(a)
fmt.Printf("b的值为%v, b的类型%T", b,b)