您的位置 首页 > 数码极客

如何比较两个浮点数相等

布尔类型

Go语言中布尔类型关键字为bool,其仅有两个字面量值:true和false。

var ok bool // 声明一个bool类型变量,使用默认值false var found bool = true // 声明一个bool类型变量,并显式初始化true var passed = true // 声明一个变量,并显式初始化true,编译器自动推断为bool类型

布尔类型和整型之间不能自动隐式转换。

var ok bool ok = 0 // 错误:0是整型,不能直接赋值给bool类型的变量

整型

Go语言内置12种整数类型,分别是uintptr、uint64、uint32、uint16、uint8、uint、int64、int32、int、int16、int8、byte。

需要注意的是,int与int32、int64之间的关系,在64位CPU上int与int64位数是相同的为8位,在32位CPU上int与int32位数是相同的为4, int32与int64无论在32或64位CPU上位数都是固定的分别为4和8位。

下图是在64位CPU上的输出结果:

下图是在32位CPU上的输出结果:

另外,不同整数类型之间需要强制转换,但byte是uint8的别名,因此byte与uint8之间不需要强制转换,可以直接赋值。

var b1 int32 = 13 var b2 int64 = 13 b2=b1 // b1是int类型,b2是int64类型,不能直接赋值 b2=int64(b1) // 将b1强制转换为int64类型 var c1 byte var c2 uint8 c1=c2 // byte是uint8的别名,因此可以直接赋值

byte类型的源代码

浮点类型

浮点类型用于表示包含小数点的数据,Go语言内置了float32和float64两种浮点类型。

浮点类型需要注意的是:

  • 字面量会被编译器自动推导为float64类型

  • 由于浮点类型很难精确表示和存储,因此不应该对两个浮点数之间执行相等、不等以及比较大小等操作。如果确有需要,可以使用相关的math标准库进行操作。

字符串类型

字符串类型是Go语言的基础类型之一,可以使用字面量进行初始化。

var a = "Hello Golang!"
  • 可以像数组一样通过下标来操作字符串,但不能通过下标来修改字符串。
var a = "Hello Golang!" var b= a[0] a[0]='h' // 错误,不能通过下标来修改字符串
  • 字符串类型的变量默认值(零值)为""空字符串,而不是nil。
  • 字符串转换为[]byte会复制字符串内容,所以当字符串较大或操作非常频繁时会引起性能问题。此场景下建议直接用[]byte来代替字符串。
var a = "Hello Golang!" var b =[]byte(a)
  • 可以用len函数来获取字符串的长度。
var a = "Hello" ("(%s) length is %d\n",a, len(a)) // (Hello) length is 5 var a1 = "a小从" // Go默认是用UTF8编码,因此一个汉字占3个字节 ("(%s) length is %d\n",a1, len(a1)) // (a小从) length is 7
  • 字符串拼接可以简单的使用+进行,但要拼接大量字符串会引起性能问题。具体原因会在后续文章中介绍。

rune类型

Go语言有两种字符类型:

  • byte字节类型,byte是uint8的别名,常用来处理ascii字符。
  • rune字符类型,rune是int32的别名,常用来处理unicode或utf-8字符。

可以把rune看作是c#的char类型。

用法示例

指针

Go语言支持指针,声明语法*T,支持多级指针**T。在变量名前加&获取变量地址。

var a int =13 // 声明一个指向int类型的指针变量,并使用&获取int类型变量a的地址初始化 var p *int=&a
  • 结构体指针访问结构体字段和方法时仍然使用“.”操作符,Go没有“->”操作符。
type Foo struct { Name string } var fp=&Foo{} _=
  • 不支持指针运算。

由于Go运行时自带垃圾回收功能,支持指针运算会给垃圾回收功能增加难度,因此Go直接禁止指针运算。

var a int =13 // 声明一个指向int类型的指针变量,并使用&获取int类型变量a的地址初始化 var p *int=&a p++ //错误 不允许执行指针运算
  • 函数中允许返回局部变量的地址。

Go编译器会使用逃逸分析机制将该局部变量分配到堆内存空间上。

func sum(a int ,b int) *int{ s:=a + b return &s // 变量s为被逃逸分析机制分配到堆上 }

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何比较两个浮点数相等,如何比较两个浮点数相等,为什么”边界阅读