# 浮点数/Float

浮点型表示带小数位的数字,或称浮点数。
浮点型在内存中的表示包含三个部分:

  • 符号位
  • 指数位
  • 有效数字位
类型 长度(byte) 指数位(bit) 有效数字位(bit)
float32 4 8 23
float64 8 11 52

# 定义浮点型

例子: 定义浮点型

var speed float32
speed = 35.75
height := 1.78

如果对浮点数进行匿名赋值的时候,默认会识别为 float64 类型

speed := 35.75
// 等于
speed float64 := 35.75

# 精度问题

注意,跟其他语言一样,Go 的浮点型也不绝对精确

func main() {
	var x, y = 3.1, 3.0
	fmt.Println(x-y == 0.1)
}

得到的结果会是false

# 手动实现精度比较

如果希望准确比较,我们可以声明一个函数,判断两者的差。只要两者差在精度容忍范围,就认为他们相等。

func main() {
	var x, y float64 = 3.1, 3.0
  // 比较x-0.1 和 y,精度为0.1
	fmt.Println(IsEqual(x-0.1, y, 0.1))
}

func IsEqual(x float64, y float64, precision float64) bool {
  // 两者的差值只要小于精度,就认为两者相对。
	return math.Abs(x-y) < precision
}