基本数据类型-浮点类型float32和float64 和浮点运算出现精度丢失

float32和float64点

go语言支持2种浮点类型: float32和float64点

float32的取值范围

float32的取值范围在-3.4E38 到 3.4E38
就是说:3.4E38 ==>3.4 * 10的38次方

float64的取值范围

float64的取值范围
取值范围为约 -5E324‌至 ‌±1.8E308‌
需注意:虽然数值范围极大,但‌精确表示整数的上限为 2^53,超出后连续整数将无法区分‌‌

保留2/4/6位小数

%2.f: 默认保留2位小数;不足2位时后面补充0;保留2位小数时会进行四舍五入。
%4.f: 默认保留4位小数;不足4位时后面补充0;保留4位小数时会进行四舍五入。
%f: 默认保留 6 位小数;不足6位时后面补充0;保留6位小数时会进行四舍五入。浮点数格式(专用于小数)

%T输出变量类型和输出变量的值占位符

%T: 输出该变量所属的数据类型 T-----> Type
%v: 它会根据变量的类型,自动选择一种可读性强的格式输出;它会输出字段值 v--->value

输出变量值占位符

package main
import ("fmt")
// 入口函数
func main()  {
	pi := 3.1415
    // 输出:3.1415 3.141500  类型float64
	fmt.Printf("%v\n %f\n 类型%T\n",pi, pi, pi)  
}

查看占用字节数 unsafe.Sizeof()

package main
import "unsafe"
import ("fmt")
// 入口函数
func main()  {
	pi := 3.1415
	// 占用的字节数: 8
    // 8个字节的话,我们知道是int64
	fmt.Println("占用的字节数:", unsafe.Sizeof(pi)) 
}

%.2f进行四舍五入;不足2位是后面补充0

package main
import ("fmt")
// 入口函数
func main()  {
	pi := 3.148
	// 保留2位小数;进行四舍五入;不足2位是后面补充0
	fmt.Printf("%.2f\n", pi)   // 输出: 3.15
}

go语言中浮点类型默认是float64

package main
import ("fmt")
// 入口函数
func main()  {
	pi := 3.14811
	// 输出: 3.14811   类型是是float64
	fmt.Printf("%v\n 类型是是%T\n", pi, pi)  
	// 说明go语言中浮点类型默认是float64
}

fmt.Printf的第一个参数必须是格式字符串

fmt.Printf 的第一个参数必须是格式字符串(包含 % 占位符),不能直接传一个数值。

package main
import ("fmt")
// 入口函数
func main()  {
    // 3.13乘以10的2次方 = 313
	nun := 3.13e2 
    // 会报错的哈。因为第1个参数必须是格式化字符串,不能是一个数值
	fmt.Printf(nun)  
}

3.13乘以10的2次方=3.13e2

package main
import ("fmt")
// 入口函数
func main()  {
	nun := 3.13e2 // 3.13乘以10的2次方 = 313
	fmt.Printf("%v",nun)  
}

3.13e-2 表示 3.13 × 10⁻² = 0.0313

package main
import ("fmt")
// 入口函数
func main()  {
	nun := 3.13e-2 
	// 0.0313
	fmt.Printf("%v",nun)  
}

小数乘整数出现精度丢失

package main
import ("fmt")
// 入口函数
func main()  {
	var num float64 =  1129.6
	// 输出 112959.99999999999 出现了精度丢失
	fmt.Printf("%v",num*100)  
}

小数相减出现精度丢失

package main
import ("fmt")
// 入口函数
func main()  {
	num1 := 8.2
	num2 := 2.8
    // 5.3999999999999995
	fmt.Printf("%v", num1- num2)  
}

可以使用第3方包来进行解决

go中float有精度丢失的问题

在go语言中,float中有精度丢失的问题
所以在做四则运算的时候,需要使用专门的包来解决这个问题哈。

posted @ 2026-08-16 19:57  何人陪我共长生  阅读(0)  评论(0)    收藏  举报