go语言数据类型转换

go语言数据类型转换

golang不会对数据进行隐式的类型转换,只能手动去执行转换操作,表达式T(v)将值v转换为类型T
T : 就是数据类型
V : 就是需要转换的变量

一、数值类型转换

数值间转换的时候建议从小范围转换成大范围,比如int8转int16,大范围转换成小范围的时候,比如int16转int8,会发生精度丢失(截断)的情况,如果转换不成功就会溢出。

1.1、整数间转换
package main
import "fmt"
func main() {
	var a int8 = 6
	var b int16 = 12
	var c = b + 5 //根据b推导出c也是int16
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)
	c = int16(a) + b
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)
}
	//整数间的数值运算,值:17 ----类型int16
	//整数间的数值运算,值:18 ----类型int16
1.2、浮点数间转换
package main
import "fmt"
func main() {
	var a float32 = 6.1
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", a, a)
	//整数间的数值运算,值:6.1 ----类型float32
	fmt.Printf("整数间的数值运算,值:%.1f ----类型%T\n", a, a)
	//整数间的数值运算,值:6.1 ----类型float32
	var d float64 = float64(a)
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", d, d)
	//整数间的数值运算,值:6.099999904632568 ----类型float64
	var b float64 = 12.1
	var c = float64(a) + b
	fmt.Printf("整数间的数值运算,值:%v ----类型%T\n", c, c)
	//整数间的数值运算,值:18.19999990463257 ----类型float64
}
1.3、整数与浮点类型间的转换
func main() {
	var a int = 8
	var b float64 = 12.1
	var c = float64(a) + b
	fmt.Printf("整数和浮点数直接的运算,值:%v ----类型%T\n", c, c)
}

二、其他类型转换成String类型

2.1 fmt.Sprintf()把其他类型转换成String类型

注意:fmt.Sprintf()使用中需要注意转换的格式,int 为%d, float 为%f, bool为%t, byte 为%c

注意:fmt.Sprintf()使用中需要注意转换的格式,int 为%d, float 为%f, bool为%t, byte 为%c

package main
import "fmt"
func main() {
	var (
		a int     = 20
		b float64 = 12.456
		c bool    = true
		d byte    = 'a'
	)
	var strA, strB, strC, strD string
	strA = fmt.Sprintf("%d", a)
	strB = fmt.Sprintf("%f", b)
	strC = fmt.Sprintf("%t", c)
	strD = fmt.Sprintf("%c", d)
	fmt.Printf("stra类型是%T,值是%v\n", strA, strA)
	fmt.Printf("strb类型是%T,值是%v\n", strB, strB)
	fmt.Printf("strc类型是%T,值是%v\n", strC, strC)
	fmt.Printf("strd类型是%T,值是%v\n", strD, strD)
}
/*stra类型是string,值是20
strb类型是string,值是12.456000
strc类型是string,值是true
strd类型是string,值是a
*/
// 变量命名方式也是两种
2.2、使用strconv包把其他类型转换成String类型
2.2.1、int 转换成 String 类型
func main() {
	var (
		a    int64 = 20
		strA string
		b    int = 19
	)
	strA = strconv.FormatInt(a, 10)   //方法1
	fmt.Printf("类型%T,数值%v\n", strA, strA)
	strA = strconv.Itoa(b)  //方法2
	fmt.Printf("类型%T,数值%v\n", strA, strA)
}
//strconv.Itoa()等价于strconv.FormatInt()
2.2.2、float 转换成 String 类型
strconv.FormatFloat(f float64, fmt byte, prec, bitSize int)
参数1是要转换的值,需要时float64类型
参数2是格式化的进制类型
    'f' (-ddd.dddd)
    'b' (-ddddp±ddd,指数为二进制)
    'e'-d.dddde±dd,十进制指数)、
    'E'-d.ddddE±dd,十进制指数)、
    'g' (指数很大时用'e'格式,否则'f'格式)
    'G' (指数很大时用'E'格式,否则'f'格式)
参数3是保留的小数点数量,设置为 -1 表示不对小数点格式化 ,设置为 3 表示保留三位小数。
参数4是格式化后的类型为int,位数是设置的bitSize,设置64,那就是格式化后的具体类型为int64func main() {
	var a float64 = 20.123456
	star01 := strconv.FormatFloat(a, 'f', -1, 64)
	fmt.Printf("类型%T,数值%v\n", star01, star01)
	//类型string,数值20.123456
	star02 := strconv.FormatFloat(a, 'f', 3, 64)
	fmt.Printf("类型%T,数值%v\n", star02, star02)
	//类型string,数值20.123
}
2.2.3、bool 转 String类型
func main() {
	var a bool = true
	str := strconv.FormatBool(a)
	fmt.Printf("类型%T,数值%v\n", str, str)
	//类型string,数值true
	var b bool = false
	str01 := strconv.FormatBool(b)
	fmt.Printf("类型%T,数值%v\n", str01, str01)
	//类型string,数值false
}

三、String类型转换成数值类型

Parse类函数用于转换字符串为给定类型的值:ParseBool()ParseFloat()ParseInt()ParseUint()。由于字符串转换为其它类型可能会失败,所以这些函数都有两个返回值,第一个返回值保存 转换后的值,第二个返回值判断是否转换成功。

3.1、String类型转换成int类型
func main() {
	a := "12"
	num, _ := strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "hello"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "12.1"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "-12"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "12"
	num, _ = strconv.ParseInt(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	num01, _ := strconv.ParseUint(a, 10, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num01, num01)
	a = "-12"
	num02, _ := strconv.Atoi(a)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)
	a = "12"
	num02, _ = strconv.Atoi(a)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)
	a = "hello"
	num02, _ = strconv.Atoi(a)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num02, num02)
}

/*变量hello,类型int64,数值0
变量12.1,类型int64,数值0
变量-12,类型int64,数值-12
变量12,类型int64,数值12
变量12,类型uint64,数值12
变量-12,类型int,数值-12
变量12,类型int,数值12
变量hello,类型int,数值0
*/

//非数字字符串不可以转换为int类型,浮点字符串也不可以转换为int类型
//ParseInt()可以转换正数和负数,ParseUint()只能转换正数
//strconv.Atoi() 等价于ParseInt()
3.2、String类型转换成float类型
func main() {
	a := "12.123456"
	num, _ := strconv.ParseFloat(a, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "12"
	num, _ = strconv.ParseFloat(a, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
	a = "hello"
	num, _ = strconv.ParseFloat(a, 64)
	fmt.Printf("变量%v,类型%T,数值%v\n", a, num, num)
}

/*变量12.123456,类型float64,数值12.123456
变量12,类型float64,数值12
变量hello,类型float64,数值0*/
//非数字字符串不可以转换为float类型
3.3、String类型转换成bool类型
func main() {
	s := "true"
	num, _ := strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "false"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "hello"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "1"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
	s = "0"
	num, _ = strconv.ParseBool(s)
	fmt.Printf("变量%v,类型%T,数值%v\n", s, num, num)
}

/*变量true,类型bool,数值true
变量false,类型bool,数值false
变量hello,类型bool,数值false
变量1,类型bool,数值true
变量0,类型bool,数值false*/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.自动驾驶-局部路径规划

1. 规划planning 2. 局部路径规划模块实现-模块外围:输入 3. 局部路径规划模块实现模块外围:输出 4. 控制control 5. 系统分类 6 系统分类

C 认识指针

目录 一、取地址操作符(&) 二、解引用操作符(*) 三、指针变量 1、 指针变量的大小 2、 指针变量类型的意义 2.1 指针的解引用 2.2 指针 - 整数 2.3 调试解决疑惑 认识指针,指针比较害羞内敛,我们…

自定义SpringBoot的starter

案例需求:自定义redis-stater。要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean。 实现步骤: 1、创建redis-spring-boot-autoconfigure模块 2、创建redis-spring-boot-starter模块,依赖redis-spring-boot-autoconfigure的…

Android 文件传输

经常写adb命令传文件,结果发现Android studio有自带的文件管理器,可以上传下载文件。

程序包的创建

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 前面很多范例中都用到的 dbms output.put_line 实际上就是一个典型的程序包应用, 其中 dbms output是程序包的名称,put_line 是该程序包中定义的一个…

碳纤维复合材料的纳米纤维膜

碳纤维复合材料的纳米纤维膜是一种具有良好性能和应用前景的新材料。以下是关于这种材料的详细介绍: 制备方法:碳纤维复合材料的纳米纤维膜可以通过多种方法制备,包括化学气相沉积法、固相合成法、模板法等。其中,化学气相沉积法是…

十三、大模型项目部署与交付

1 硬件选型 CUDA 核心和 Tensor 核心 CUDA 核心:是NVIDIA开发的并行计算平台和编程模型,用于GPU上的能用计算,可做很多的工作。应用在游戏、图形渲染、天气预测和电影特效Tensor 核心:张量核心,专门设计用于深度学习…

YOLOv5入门(四)训练自己的目标检测模型

前言 通过前面几篇文章,已经完成数据集制作和环境配置(服务器),接下来将继续实践如何开始训练自己数据集~ 往期回顾 YOLOv5入门(一)利用Labelimg标注自己数据集 YOLOv5入门(二)处…

【PyTorch与深度学习】2、PyTorch张量的运算API(上)

课程地址 最近做实验发现自己还是基础框架上掌握得不好,于是开始重学一遍PyTorch框架,这个是课程笔记,这个课还是讲的简略,我半小时的课听了一个半小时。 1. 张量 1.1 张量操作 (1)chunk:将一…

华为手机ip地址怎么切换

随着移动互联网的普及,IP地址成为了我们手机上网的重要标识。然而,在某些情况下,我们可能需要切换手机的IP地址,以更好地保护个人隐私、访问特定地区的内容或服务,或者出于其他网络需求。华为手机作为市场上的热门品牌…

Kafka客户端工具:Offset Explorer 使用指南

Kafka作为一个分布式流处理平台,在大数据处理和实时数据流应用中扮演着至关重要的角色。管理Kafka的topics及其offsets对于维护系统稳定性和数据一致性至关重要。Offset Explorer是一个强大的桌面应用程序,它使得管理和监控Kafka集群变得简单直观。本文将…

2023 广东省大学生程序设计竞赛(部分题解)

目录 A - Programming Contest B - Base Station Construction C - Trading D - New Houses E - New but Nostalgic Problem I - Path Planning K - Peg Solitaire A - Programming Contest 签到题:直接模拟 直接按照题目意思模拟即可,为了好去…

【Unity】修改模型透明度

在 Unity 中修改模型透明度主要有两种方法:通过材质和通过着色器。以下是两种方法的步骤和解释: 方法 1:通过材质 在 Unity 编辑器中,选择你想要修改透明度的模型。在 Inspector 窗口中,找到模型的 Renderer 组件&am…

海康WEB3.3控件开发包 V3.3 前端vue项目调用实时监控画面

公司业务迭代, 需要前端vue项目里增加一个查看实时监控模块, 这个需求是之前离职的前端小哥没有研究明白的, 现在落在了我的肩上, 压力还是有的. 但是压力归压力, 问题还是要解决的. 一、调研设备和方案 第一步: 调研大佬们已经实现的方案, 找设备对接. 公司后端大佬提出用官…

Jenkins邮件发送失败问题解决

如下提示为 Extended E-mail Notification开启Debug模式下显示的错误信息, (Debug模式设置方法:Dashboard-> manage Jenkins->configure System)DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEB…

Unity3d 学习之按钮绑定事件

创建测试脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class myTest : MonoBehaviour {// Start is called before the first frame updatepublic Button _codeBindBtn null;void Start(){if (_codeBi…

LeetCode 213 —— 打家劫舍 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题是 LeetCode 198—— 打家劫舍 的升级版,多了一个首尾相连的设定。 因为首尾相连,所以第一个房屋和最后一个房屋只能偷窃其中一个。 所以,第一种方案就是不偷窃最后一个房…

每日OJ题_DFS爆搜深搜回溯剪枝⑧_力扣980. 不同路径 III

目录 力扣980. 不同路径 III 解析代码 力扣980. 不同路径 III 980. 不同路径 III 难度 困难 在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格。且只有一个起始方格。2 表示结束方格,且只有一个结束方格。0 表示我们可以走过的空…

HTML5实用大全(Part.1)

引言: 哈喽,各位小伙伴们,在本篇博客我将带领大家走进前端中的HTML5,利用HTML我们将可以在网页上自我创作内容,现在学起来,不久后自己也能制作一个花哨的项目了呢,那么,我们开始吧! …

【ROS2学习记录】—— 参考鱼香ROS

1 回顾Linux基础 (1)打开终端:Ctrl Alt T (2)ls (3)cd cd ~ cd /(4)pwd (5)mkdir -p catkin_ws/src (6)rm -rf &#…
最新文章