Golang语言基础数据类型之浮点型

简介: 这篇文章介绍了Go语言中浮点型数据的概念、存储方式、表示方法以及精度问题,并通过示例代码展示了如何声明和使用浮点型变量。

                                              作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

1.浮点数概述

浮点数就是用于存储包含小数值的,比如: 3.14,9.18等等。

Go语言支持两种浮点型数:float32和float64。这两种浮点型数据格式遵循IEEE 754标准:
    float32的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32,占用4字节。
    float64的浮点数的最大范围约为1.8e308,可以使用一个常量定义:math.MaxFloat64,占用8字节。

浮点数底层存储和操作系统无关,浮点类型底层存储: 符号位+指数位+尾数位,所以尾数位只是存了一个大概,很可能会出现精度的损失。

众所周知,浮点数的计算是不精确的(比如python的0.1+0.2),因此在做金融计算的场景我们常用的两种解决方案为:
    (1)将计算的数值转换成字符串进行计算;
    (2)将计算的数值转换成整数进行计算,比如计算前先将数字放大指定的倍数,计算完毕后再缩小相应的倍数;

2.参考案例

package main

import (
    "fmt"
    "math"
)

func main() {

    var (
        // 定义浮点类型的数据,可以表示正浮点数,也可以表示负的浮点数
        a float32 = 3.1415926
        b float32 = -3.1415926
        // 浮点数可以使用十进制表示形式,也可以使用科学记数法表示,E大小写都可以哟~
        c float32 = 314e-2
        d float32 = 3.14E+3
        // 浮点数可能会有精度的损失,所以通常情况下,建议使用float64
        e float32 = 249.0000093
        f float64 = 249.0000093
        // Golang中默认的浮点类型为: float64
        g = 9.9
    )
    fmt.Printf("a=%f\nb=%f\nc=%f\nd=%f\ne=%f\nf=%f\ng=%f,g的类型为:%T\n", a, b, c, d, e,f,g,g)

    // 浮点数字面量语法
    fmt.Printf("%f\n", math.Pi) // 打印浮点数时,可以使用fmt包配合动词%f
    fmt.Printf("%.2f\n", math.Pi)
}
目录
相关文章
|
14天前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
47 4
Golang语言之管道channel快速入门篇
|
14天前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
37 4
Golang语言文件操作快速入门篇
|
14天前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
42 3
Golang语言之gRPC程序设计示例
|
14天前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
37 4
|
14天前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
23 4
Golang语言goroutine协程篇
|
14天前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
20 3
Golang语言之Prometheus的日志模块使用案例
|
14天前
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
21 4
|
14天前
|
Go
Golang语言结构体(struct)面向对象编程进阶篇(封装,继承和多态)
这篇文章是关于Go语言中结构体(struct)面向对象编程进阶篇的教程,涵盖了Go语言如何实现封装、继承和多态,以及结构体内存布局的相关概念和案例。
27 4
|
14天前
|
Go
Golang语言基础之接口(interface)及类型断言
这篇文章是关于Go语言中接口(interface)及类型断言的详细教程,涵盖了接口的概念、定义、实现、使用注意事项以及类型断言的多种场景和方法。
22 4
|
14天前
|
Go
Golang语言结构体(struct)面向对象编程基础篇
这篇文章是关于Go语言中结构体(struct)面向对象编程的基础教程,详细介绍了面向对象编程在Go语言中的应用、结构体的定义与初始化、方法定义、跨包实例化结构体以及结构体方法和普通函数的区别。
22 4