2.3 浮点型

本篇学习 Go 的浮点类型与精度特点,并能正确完成浮点计算与输出格式化。

字数 390 字

浮点型

概念说明

浮点型用于保存带小数部分的数值。
Go 常用的浮点类型是 float32float64

语法/规则

  1. float32 占 32 位,float64 占 64 位。
  2. 浮点字面量默认类型是 float64
  3. float32 精度低于 float64,同一个数值可能出现不同的近似结果。
  4. 浮点数遵循二进制表示,很多十进制小数不能被精确表示。

浮点声明与输出示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import (
	"fmt"
	"math"
)

func main() {
	var price32 float32 = 19.9
	var price64 float64 = 19.9

	fmt.Printf("price32=%.8f\n", price32)
	fmt.Printf("price64=%.8f\n", price64)
	fmt.Printf("float32 最大值约:%.1e\n", math.MaxFloat32)
	fmt.Printf("float64 最大值约:%.1e\n", math.MaxFloat64)
}

输出结果:

1
2
3
4
price32=19.89999962
price64=19.90000000
float32 最大值约:3.4e+38
float64 最大值约:1.8e+308

精度现象示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import "fmt"

func main() {
	sum := 0.1 + 0.2

	fmt.Printf("sum=%.2f\n", sum)
	fmt.Printf("sum == 0.3 ? %t\n", sum == 0.3)
}

输出结果:

1
2
sum=0.30
sum == 0.3 ? false

常见错误

  1. 直接用 == 比较浮点数是否相等,容易因为精度误差得到意外结果。
  2. intfloat64 直接运算,不做类型转换会编译报错。
  3. %d 打印浮点数,格式化占位符与类型不匹配。
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
载入天数...载入时分秒...
发表了 0 篇文章 · 发表了 31 篇笔记 · 总计 1 万 6 千字(其中笔记 16551 字)