声明浮点型变量
- 只要数字含有小数部分,那么它的类型就是 float64
声明浮点型变量
- 如果你使用一个整数来初始化某个变量,那么你必须指定它的类型为 float64,否则它就是一个整数类型:
单精度浮点数类型
- Go 语言里有两种浮点数类型:
- 默认是 float64
- 64 位的浮点类型
- 占用 8 字节内存
- 某些编程语言把这种类型叫做 double(双精度)
- float32
- 占用 4 字节内存
- 精度比 float64 低
- 有时叫做单精度类型
- 想要使用单精度类型,你必须在声明变量的时候指定该类型
单双精度的使用场景
- 当处理大量数据时,例如 3D 游戏中的数千个顶点,使用 float32 牺牲精度来节省内存是很有意义的。
- math 包里面的函数操作的都是 float64 类型,所以应该首选使用 float64,除非你有足够的理由不去使用它。
零值
- Go 里面每个类型都有一个默认值,它称作零值。
- 当你声明变量却不对它进行初始化的时候,它的值就是零值。
显示浮点类型
- 使用 Print 或 Println 打印浮点类型的时候,默认的行为是尽可能的多显示几位小数。
- 如果你不想这样,那么你应该使用 Printf 函数,结合 %f 格式化动词来指定显示小数的位数:
%f 格式化动词
- 它由两部分组成:
- 宽度:会显示出的最少字符个数(包含小数点和小数)
- 如果宽度大于数字的个数,那么左边会填充空格
- 如果没指定宽度,那么就按实际的位数进行显示
- 精度:小数点后边显示的位数
浮点类型的精度
- 可以看到,浮点类型不适合用于金融类计算
- 为了尽量最小化舍入错误,建议先做乘法,再做除法
如何比较浮点类型
作业题
- 编写一个程序:
- 随机地将五分镍币(0.05美元)、一角硬币(0.10美元)和 25 美分硬币(0.25美元)放入一个空的储蓄罐,直到里面至少有20美元。
- 每次存款后显示存钱罐的余额
- 并以适当的宽度和精度格式化。
package main
import (
"fmt"
"math/rand"
)
func main() {
piggyBank := 0.0
for piggyBank <= 20 {
switch rand.Intn(3) {
case 0:
piggyBank += 0.05
case 1:
piggyBank += 0.10
case 2:
piggyBank += 0.25
}
fmt.Printf("$%5.2f\n", piggyBank)
}
}