12|基本数据类型:Go原生支持的数值类型有哪些?
该思维导图由 AI 生成,仅供参考
被广泛使用的整型
- 深入了解
- 翻译
- 解释
- 总结
Go语言浮点类型采用IEEE 754标准,包括单精度和双精度两种浮点数格式。Go提供了float32和float64两种浮点类型,分别对应IEEE 754中的单精度和双精度浮点数值类型。浮点数的二进制表示包括符号位、阶码和尾数,阶码和尾数的长度决定了浮点类型可以表示的浮点数范围与精度。双精度浮点类型(float64)在日常开发中更常使用,也是Go语言中浮点常量或字面值的默认类型。浮点类型的学习有助于建立应用浮点类型的理论基础,同时需要注意浮点数精度不足可能导致输出结果与常识不符的情况。 浮点类型的字面值可分为直接十进制表示和科学计数法形式。fmt包提供了针对浮点数的格式化输出,包括%f输出浮点数原值形式,%e输出十进制的科学计数法形式,%x输出十六进制的科学计数法形式。Go语言原生支持复数类型,提供complex64和complex128两种复数类型,用于专业领域的计算。复数类型的格式化输出可直接运用浮点型的格式化输出方法。 此外,文章还介绍了如何通过类型定义语法与类型别名语法创建自定义数值类型。通过类型定义语法实现的自定义数值类型与原类型是完全不同的类型,需要借助显式转型来避免编译错误。而通过类型别名创建的新类型则等价于原类型,可以互相替代。 总之,本文介绍了Go语言的浮点类型、复数类型以及如何创建自定义数值类型,为读者提供了对Go语言数值类型的全面了解和应用基础。
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
全部留言(36)
- 最新
- 精选
- 罗杰float 其实相当复杂,开发中如果能避开就避开,例如金钱单位只有美元或者人民币我建议以分作为单位。
作者回复: 嗯,是这样的。
2021-11-08658 - liaomarsvar f1 float32 = 16777216.0 var f2 float32 = 16777217.0 f1 == f2 // true f1 转换成二进制是:1266679808 f2 转换成二进制也是:1266679808 这个为什么是相等的,是因为转换成二进制的数据是相等的。
作者回复: 👍
2021-11-09238 - jc9090kkktype Myint int32 这种自定义类型在实际应用中有什么优势吗?
作者回复: 采用自定义类型时,我们考虑的角度不是优劣,而是需求。以type Myint int32为例,我们这么做,显然是因为int32不能满足我们的需求。哪些需求不能满足呢?第一个就是抽象,我们要建立更高级的抽象;第二个是我们不能为go原生类型int32增加我们想要的方法,只有通过自定义类型来实现。
2021-11-1029 - 羊羊0x1.Fp+0 // 1.9375 * 2^0 = 1.937500这个是如何计算得到的?0x1.F=1.9375是如何得到的?
作者回复: 0x1.Fp+0中的F是十六进制数,它的十进制值为15。F在小数点后一位,因此上面数字的小数部分0.F转换为10进制小数就是15 x 16^(-1)=0.9375
2021-11-0815 - 在下宝龙、type Myint int type MyMapp map[string]int func main(){ var x Myint var y int x=y//会报错 mp1:=make(MyMapp) mp2:=make(map[string]int) mp1=mp2 //不会报错 } 老师为甚么map就不会报错
作者回复: int与map[string]int虽然都是go原生类型,但它们却有不同。int在go中被归为defined type一类,而map[string]int则不是defined type。因此两个defined type: int与MyInt相互赋值必须显式转型。而map[string]int与MyMapp中,前者不是defined type,go语言有规定:这种情况下,可以直接赋值。具体参考这里:https://golang.google.cn/ref/spec#Assignability
2021-11-298 - 松func main() { var f2 float32 = 16777216.0 var f3 float32 = 16777217.0 // 1001011100000000000000000000000 fmt.Printf("%b\n", math.Float32bits(f2)) // 1001011100000000000000000000000 fmt.Printf("%b\n", math.Float32bits(f3)) } 变量的二进制表示一样,所以相同了
作者回复: 👍
2022-01-287 - 运维夜谈老师,自定义类型和类型别名有什么样的应用场景?比如自定义一个类型,本质还是int32,那为啥不直接用int32,看起来感觉有点语法糖的意思,用处不大,特别是类型别名😢
作者回复: 原生的int32不能有方法,但自定义类型可以有方法哦。比如我定义一个名为Age的类型:type Age int32。Age可以作为“年龄”的抽象。我们可以为Age定义方法。至于类型别名,更多用于重构代码或基于已有包的二次封装。
2021-12-2925 - ryanxw工程开发中尽量不用浮点,像我们都要求用string来存价格
作者回复: 浮点用起来的确坑挺多。当然这也和其他实现原理有关。
2022-04-154 - Kepler因为两个浮点数的差异在尾数M的第24位,超了
作者回复: ✅
2022-03-064 - tequ1lAneio老师好,类型别名具体会在哪些场景用得到呢?
作者回复: 类型别名加入go的初衷就是为了重构,这也是其主要场景。在第17讲中还会有提及。
2021-11-094