GO-学习-04-基本数据类型-浮点型

浮点型:float32和float64 %f
-3.4e38——±3.4e38

package main
//import "fmt"
//import "math"
import ("fmt""unsafe""math"
)func main(){//1.定义float类型var a float32 = 3.12fmt.Printf("值:%v--%f,类型%T",a,a,a)  //3.12--3.120000,类型float32fmt.Println(unsafe.Sizeof(a)) //float32占用4个字节var b float64 = 3.12fmt.Printf("值:%v--%f,类型%T",b,b,b)  //3.12--3.120000,类型float34fmt.Println(unsafe.Sizeof(a)) //8var c float64 =3.1415925535fmt.Printf("%v--%f",c,c) //3.1415925535--3.141593   四舍五入6位小数fmt.Printf("%.2f",c)//3.14  保留两位小数fmt.Printf("%.4f",c)//3.1416   //四舍五入//64位系统,浮点型默认是float64f1 := 3.14159261fmt.Printf("%T",f1) //float64//科学计数法表示浮点型数据var f2 folat32 = 3.14e2 //3.14*10的2次方fmt.Printf("%v--%T",f2,f2) // 314--float32var f3 folat32 = 3.14e-2 //3.14*10的-2次方fmt.Printf("%v--%T",f3,f3) // 0.0314--float32//int类型转化为floata1 := 10a2 := float64(a1) fmt.Printf("a1的类型是%T,a2的类型是%T",a1,a2)  //int float64//float类型转换成intvar a3 float32 = 22.33a4 := int(a3)  //23   只直接截取,不建议
}

在Go语言中,float类型的丢失问题一般是由于浮点数的精度问题造成的。由于计算机内存的限制,浮点数无法精确表示所有的实数,因此在进行浮点数的计算时可能会出现一些舍入误差。

例如,下面的代码会导致float64类型的丢失问题:

package mainimport ("fmt"
)func main() {a := 0.1b := 0.2c := a + bfmt.Println(c)
}

上面的代码中,我们本来期望输出0.3,但实际输出的结果是0.30000000000000004。这是因为0.1和0.2在计算机中无法精确表示,所以计算结果会有一定的误差。

为了解决这个问题,可以使用Decimal类型来处理浮点数的计算。Decimal类型是Go语言中的一个精确计算库,可以避免浮点数计算中的丢失问题。

package mainimport ("fmt""github.com/shopspring/decimal"//引入包,需要提前下载,可以是全局也可以单个项目
)func main() {a := decimal.NewFromFloat(0.1)b := decimal.NewFromFloat(0.2)c := a.Add(b)  //  Add  +   Sub -    Mul *  Div /fmt.Println(c)a1 := 0.1b1 := 0.2c1 := decimal.NewFormFloat(a1).Add(decimal.NewFromFloat(b1))fmt.Println(c1)
}

使用Decimal类型进行浮点数计算时,可以得到精确的结果0.3。

除了使用Decimal类型,还可以在比较浮点数时使用一个小的误差范围来判断相等。例如,可以使用math库中的Float64bits函数将浮点数转换为一个整数,然后比较两个整数是否相等来判断两个浮点数是否相等。

package mainimport ("fmt""math"
)func main() {a := 0.1b := 0.2c := 0.3epsilon := 1e-9if math.Abs(a+b-c) < epsilon {fmt.Println("a + b = c")} else {fmt.Println("a + b != c")}
}

上面的代码中,我们使用了一个很小的误差范围epsilon来判断a+b和c是否相等,如果两者的差小于epsilon,则认为它们相等。这样可以避免浮点数丢失问题带来的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】

【图论】No. 0200 岛屿数量 【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

DjangoRF-10-过滤-django-filter

1、安装pip install django-filter https://pypi.org/ 搜索django-filter基础用法 2、进行配置 3、进行内容调试。 4、如果碰到没有关联的字段。interfaces和projects没有直接关联字段&#xff0c;但是interface和module有关联&#xff0c;而且module和projects关联&#x…

linux下使用yum安装mysql

本文使用常规方式手动安装mysql 第一步 下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm第二步 安装mysql-community-release-el7-5.noarch.rpm包 rpm -ivh mysql-community-release-el7-5.noarch.rpm第三步 安装mysql-server yum -y…

Esp_server 安卓嵌入壳子,原创! 2024/7/28 20:58

用到的软件: uni-app 思路: 让用户感觉是,一个完整的程序.实际上只是一个类浏览器壳子.轻便小巧. 由于是第一次用uni-app开发类软件,所以前前后后耗费7小时! 隔行如隔山,不是白讲的. 软件界面: 软件功能: 简化输入: 输入ip地址,例:http:// www.baidu.com 完整网址 前面…

Javaer 5分钟入门 Golang

文章目录 前言一个 go 文件长啥样&#xff1f;Go 语言的变量变量类型变量声明 Go 语言的函数&方法Go 语言没有的概念访问修饰符面向对象模型异常处理机制 Go 语言高效简洁的并发编程总结 前言 这两年主流的编程语言 Golang&#xff0c;想必大家或多或少都接触过。云原生领…

使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

前言 RabbitMQ 是一个功能强大的开源消息队列系统&#xff0c;它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 特点 成熟&#xff0c;稳定消息持久化灵活的消息路由高性能&#xff0c;高可用性&#xff0c;可扩展性高支…

Python的异常处理机制

Python的异常处理机制 异常处理是编程中的一个重要概念&#xff0c;用于处理程序运行过程中出现的错误或异常情况。Python提供了强大的异常处理机制&#xff0c;使得程序能够优雅地处理错误&#xff0c;而不是直接崩溃。 1. 异常处理的基本概念 在Python中&#xff0c;异常处…

【PYTHON】多进程运行示例含共享数据

运行结果 Python多进程调用示例 import multiprocessing import time import os import sys# 注册多个函数用于不同进程分别调用 def testcase0():time.sleep(1)return "case0_"get_time()def testcase1(timestamp):return "case1_"timestampdef testcase…

Python | TypeError: ‘float’ object is not subscriptable

Python | TypeError: ‘float’ object is not subscriptable 在Python编程中&#xff0c;遇到“TypeError: ‘float’ object is not subscriptable”这一错误通常意味着你尝试对浮点数&#xff08;float&#xff09;使用了下标访问&#xff08;如数组或列表那样的访问方式&a…

数电票如何查验、管理?C#发票查验接口集成

数字化时代&#xff0c;一切事务都在逐渐向数字化转型&#xff0c;发票也不例外。现如今&#xff0c;数电票俨然成为了商业交易的新常态&#xff0c;不仅环保高效&#xff0c;还有助于简化财务管理流程。但任何事务都具有双面性&#xff0c;如何对数电票的真实性和有效性进行查…

Mindspore框架循环神经网络RNN模型实现情感分类|(四)损失函数与优化器

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

探索 Blockly:自定义积木实例

3.实例 3.1.基础块 无输入 , 无输出 3.1.1.json var textOneJson {"type": "sql_test_text_one","message0": " one ","colour": 30,"tooltip": 无输入 , 无输出 };javascriptGenerator.forBlock[sql_test_te…

数据结构:二叉树(堆)的顺序存储

文章目录 1. 树1.1 树的概念和结构1.2 树的相关术语 2. 二叉树2.1 二叉树的概念和结构2.2 二叉树的特点2.3 特殊的二叉树2.3.1 满二叉树2.3.2 完全二叉树 2.4 二叉树的性质 3. 实现顺序结构二叉树3.1 堆的概念和结构3.2 初始化3.3 销毁3.4 插入数据3.5 向上调整算法3.6 删除数据…

【二叉树】—— 算法题

一、单值二叉树 题目要求&#xff1a;判断二叉树是不是单值二叉树&#xff08;就是所以节点的值都相等&#xff09;。 思路&#xff1a; 利用二叉树的递归思想&#xff0c;判断每一个节点值与其左右子节点的值是否相等&#xff0c;如果遇到空节点&#xff0c;就返回true&#…

JavaScript的常见难点(一)

1. 异步编程 如何使用&#xff1a;使用回调函数、Promise、async/await 来处理异步操作。面试问题&#xff1a; 解释什么是 Promise&#xff0c;如何使用它。async 和 await 是什么&#xff1f;它们如何简化异步代码&#xff1f;面试问题的答案&#xff1a; Promise&#xff1…

linux异步操作接口

aiocb数据结构 需要头文件 #include <aiocb.h>结构定义为 struct aiocb {/* The order of these fields is implementation-dependent */int aio_fildes; /* File descriptor */off_t aio_offset; /* File offset */volatile void *ai…

醒醒,别睡了...讲《数据分析pandas库》了—/—<7>

一、 1、处理缺失值 1.1 认识缺失值 系统默认的缺失值 None 和 np. nan datapd.Series([3,4,np.nan,1,5,None]) dfpd.DataFrame([[1,2,None],[4,np.nan,6],[5,6,7]]) 1.2 缺失值查看 直接调用info() 方法就会返回每一列的缺失情况。 dfpd.DataFrame([[1,2,np.nan],[4,np.n…

后端面试题日常练-day12 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备&#xff0c;答案在文末 Java中的重载&#xff08;Overload&#xff09;和重写&#xff08;Override&#xff09;有何区别&#xff1f; a) 重载是指在同一个类中可以有多个方法同名&#xff0c;但参数列表不同&#xff1b;重写…

SpringMVC异步处理的 5 种方式

SpringMVC异步处理的 5 种方式 Spring MVC 处理异步请求的主要原因是提高 Web 应用的性能和可扩展性&#xff0c;特别是在处理长时间运行的任务或需要等待外部资源&#xff08;如数据库查询、远程服务调用等&#xff09;时。以下是一些具体原因和优势&#xff1a; 优势 1. 资…

迁移FastDFS

迁移FastDFS 停止旧集群服务 [rootnode01 fastdfs]# systemctl stop fdfs_tracker [rootnode01 fastdfs]# systemctl stop fdfs_storage [rootnode01 fastdfs]# systemctl stop nginx把旧集群的配置文件复制到新的集群上&#xff0c;并修改对应的IP地址&#xff0c;路径可以保…