Go_数据类型转换(Sprintf、Format)

2023-11-12

数据类型转换:

  • 类型转换是将一种数据类型的变量转为另一种类型的变量
  • Go强制要求使用显式类型转换。所以语法更能确定语句及表达式的明确含义
  • 转换的时候如果大的转给小的,会有精度损失(数据溢出)比如int64转int8

转换格式:

	// 将v转成T类型,但是v本身的数据类型并不会改变,只是把v变量的值类型转成T
	表达式 T(v) 

演示:

func main() {
	var a int32 = 1999999      // 小转大一样要显示转换
	var b float64 = float64(a) // a转b  a本身数据类型并不会改变,只是把a的值(1999999)转成了float64
	var c int8 = int8(a)       // 大转小不会报错,但是数据溢出会丢失数据
	fmt.Println("c:", c)
	fmt.Printf("a的数据类型是:%T\n  b的数据类型是:%T\n  c的数据类型是:%T\n", a, b, c)
}

输出:

c: 127
a的数据类型是:int32
b的数据类型是:float64
c的数据类型是:int8

转换必须确保类型一致,不能将非bool类型结果当做true/false使用

func main() {
	x := 100
	var b bool = x // 错误:无法将 'x' (类型 int) 用作类型 bool
	if x {         // 非布尔值 'x' (类型 int) 用作条件
	}
}

基本类型转string:

Sprintf():格式化为字符串

Sprintf和printf的区别:printf是将一个格式化的字符串打印到控制台,Sprintf是转换为字符串

参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。

格式:

接收变量 = fmt.Sprintf(%格式符,参数列表)

演示:

func main() {
	var (
		num1 int     = 9
		num2 float64 = 9.99
		b    bool    = false
		c    byte    = 'a'
		str  string
	)

	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%t", b)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%c", c)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)
}

输出:

str的类型: string      值:9
str的类型: string      值:9.990000
str的类型: string      值:false
str的类型: string      值:a
strconv.Format方式:

strconv.Itoa可以将数字转换成字符串类型的数字

func main() {
	var (
		num  int     = 24
		num2 float64 = 1.111
		str  string
	)

	// FormatInt参数1:要转的变量  参数2:进制
	str = strconv.FormatInt(int64(num), 10)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	// strconv.FormatInt也可以用来转换进制,比如将10进制转换为2进制,其它进制,换掉后面的数字就可以了
	str = strconv.FormatInt(123, 2)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	// 'f':格式  10:保留10位   64:float64
	str = strconv.FormatFloat(num2, 'f', 10, 64)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = strconv.FormatBool(false)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = strconv.Itoa(num) 
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)
}

输出:

str的类型: string      值:24
str的类型: string      值:1111011
str的类型: string      值:1.1110000000
str的类型: string      值:false
str的类型: string      值:24

string转基本类型:

将string类型转换成基本数据类型时,要确保string类型能够转成有有效的数据

例:可以把"123"转成int类型,但是不可以将"aaa"转成int类型,编译器不会报错,go会把它变成默认值0,因为go会判断这个值能不能转成有效的数据,如果不可以会按照该数据的数据类型的默认值赋值。

strconv方式:
func main() {
	var (
		str string = "123"
		i   int64  // 这里只能用int64
		f   float64
		b   bool
	)
	// str:字符串	base:进制	bitSize:数据类型
	i, _ = strconv.ParseInt(str, 10, 64)
	fmt.Printf("i的类型: %T\t 值:%v\n ", i, i)

	f, _ = strconv.ParseFloat(str, 64)
	fmt.Printf("f的类型: %T\t 值:%v\n ", f, f)

	b, _ = strconv.ParseBool(str)
	fmt.Printf("b的类型: %T\t 值:%v\n ", b, b)

	s, _ := strconv.Atoi("str")
	fmt.Printf("s的类型: %T\t 值:%v\n ", s, s)
}

输出:

i的类型: int64     值:123
f的类型: float64   值:123
b的类型: bool      值:false
s的类型: int       值:0

字符串转字节切片

func main() {
	// 字符串转切片
	var b = []byte("itzhuzhu")
	fmt.Println("b = ", b)

	// 切片转字符串
	var str = string([]byte{97, 98, 99})
	fmt.Println("str = ", str)
}

输出:

b =  [105 116 122 104 117 122 104 117]
str =  abc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go_数据类型转换(Sprintf、Format) 的相关文章

  • 如何设置 highcharts 中 x 轴标签的格式

    I have the following highchart output 我只想在 x 轴标签中看到 Feb 10 而不是 Feb 10 18 00 因此所有 xaxis 标签都将类似于 Feb 10 Feb 12 等 但工具提示将与输出
  • xcode4模板格式问题

    xcode4 使用新的项目模板格式 xctemplate 使用现有模板 我可以获得所需的一切 除了将文件添加到项目中而不复制它 我需要从我的模板创建的所有项目都使用共享资源 这样我就可以一次更新所有项目 只更新一个文件 谢谢 您是否尝试从模
  • Python struct.error:结构格式中的错误字符

    首先我想知道这个python语句的作用 struct unpack sH len data 2 data 其次 我必须使用 python 发出 ICMP 请求消息 问题是我已经得到了老师给我的一些帮助代码 def step4 code se
  • 更改 mschart 轴上的日期时间格式

    我正在使用 mschart 显示一段时间内的一些值 它看起来像这样 正如您所看到的 第一个值是从 15 11 开始 最后一个值是从 16 10 开始 但在 x 轴上它显示的是日期 我怎样才能改变这个 编辑 将 XValueType 更改为
  • 月份 R 没有前导零 [重复]

    这个问题在这里已经有答案了 format 在 R 中没有明显的选项来显示不带前导 0 的月份 与年份相同 还有其他方法可以得到这个结果吗 该解决方案应允许用户灵活选择是否仅在日 月 年或任意组合中省略 0 in as Date 2005 0
  • 将日期转换为特定格式的字符在R中

    我需要映射 3 4 个具有不同日期格式的不同数据帧 我们如何将日期转换为以下格式 YYYY MM DD 转换为以下格式的字符 MMM YY 从字符串创建日期对象 如果您的列已采用日期格式 请跳过此操作 original date lt as
  • Android 货币输入固定小数

    如何创建仅以货币格式格式化输入的编辑文本条目 当用户输入 5 时 我希望输入看起来像 0 05 然后当他们输入 3 时 输入现在应该看起来像 0 53 最后输入 6 并且输入应该看起来像 5 36 ninjasense 的完整解决方案基本上
  • Fortran:向文件添加列(即跳过不同数量的水平空格)

    我是 Fortran f90 的初学者 一些看似简单的问题结果却导致严重头痛 感谢您帮助我解决这个问题 我的代码运行一个循环 处理数据并将它们写入文件 我希望将这些数据写入同一文件的列中 直到循环完成 OPEN unit 11 file f
  • 使用 python 字符串格式插入制表符

    我正在尝试使用 format 形成一个字符串 但无法弄清楚这一点 lems scaena persona improbus for i in lems print format i t whatever 但拉环并没有像我想象的那样拉紧 实际
  • Android 数字格式不知为何是错误的,我得到的不是 3.5,而是 3.499999999,为什么?

    我将一些数据存储在数据库中 然后使用游标读取这些数据 所有数据均为 56 45 3 04 0 03 类型 即小数点后两位 现在我想对它们求和 但这似乎并不容易 我得到这些数字c getDouble 3 然后我将它添加到 sum 变量中 如下
  • printf 字符串,可变长度项

    define SIZE 9 int number 5 char letters SIZE this wont be null terminated char fmt string 20 sprintf fmt string d ds SIZ
  • mysql 如何比较 dd-mon-yy 格式的日期

    如何比较格式中的日期dd mon yy 例如 2014 年 11 月 10 日 gt 2013 年 10 月 7 日 select expiration date from grocery where expiration date lt
  • SQL日期格式转换? [dd.mm.yy 至 YYYY-MM-DD]

    是否有 mySQL 函数可以将日期从 dd mm yy 格式转换为 YYYY MM DD 例如 03 09 13 gt 2013 09 03 由于您的输入是表单中的字符串03 09 13 我假设 因为今天是 2013 年 9 月 3 日 d
  • 如何在seaborn热图标签中使用科学计数法?

    我正在尝试在 python 中使用seaborn 获取热图 不幸的是 即使数字非常大 它也没有使用科学记数法 我想知道是否有任何简单的方法可以转换为科学记数法或任何其他合理的格式 这是显示问题的一段代码 import seaborn as
  • 基于浏览器位置/设置的 Angular 2 Datepipe 格式

    有没有办法使 datepipe 动态化 以便如果它是美国浏览器 则 d atepipe 返回美国格式 yyyy MM dd 而当它是欧洲浏览器时 它返回欧洲格式 dd MM yyyy Thanks 这可能很困难 尤其是在使用 aot 时 它
  • 如何更改刻度标签字体大小

    在 matplotlib 图中 如何使用以下命令设置刻度标签的字体大小ax1 set xticklabels 更小 此外 如何将其从水平旋转为垂直 其实还有更简单的方法 我刚刚发现 import matplotlib pyplot as p
  • 强制 clang-format 根本不碰评论

    我故意在行的开头提供一些注释 例如一些调试代码 并且不想缩进这些行 我同意 clang format 根本不碰 评论 他们全部 我发现的唯一设置是ReflowComments false仍然可以识别评论 我没有找到任何不缩进注释的设置 如果
  • 在vscode中使用reactjs报错

    在 Visual Studio 代码中使用 jsx 语法 Visual Studio代码报错 请帮我 谢谢 符号 例如 而不是这样做 return lt button className square gt TODO lt button g
  • 输入类型货币格式,带逗号和小数位 2

    我只是想问如何制作输入类型文本的货币格式的JavaScript 当您输入数字时 数字是否可能带有逗号 另外 如何使数字固定为 2 个小数 如果我输入 3 位小数 最后一个数字将四舍五入 因此可以是 2 位小数 我有一个仅接受数字的文本框 我
  • Spring + Jackson + Joda时间:如何指定序列化/反序列化格式?

    我有以下课程 public static class ARestRequestParam String name LocalDate date joda type 我希望它从以下由 Jackson 处理的 JSON 中反序列化 名称 abc

随机推荐

  • pytest参数化实现DDT:读取JSON数据

    JSON JavaScript Object Notation JS 对象简谱 是一种轻量级的数据交换格式 与上一篇文章类似 使用pytest中的pytest mark parametrize 便可实现参数化 代码如下所示 导入json模块
  • conda新建、复制、删除、重命名envs环境

    1 新建环境 conda create n torch python 3 6 这样就创建好了一个名叫torch的python3 6环境 2 复制环境 conda create n new torch clone torch 这样就将torc
  • 【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 LSTM神经网络算法 1 2 PSO算法 1 3 PSO LSTM负荷预测模型 2 运行结果 2
  • pytorch: 转onnx模型

    摘要 onnx Open Neural Network Exchange 主要用于部署 训练一般使用pytorch和tensorflow 等训练完成 我们需要模型转成onnx 用于部署在云或者边缘计算上 而为什么要要转成onnx模型呢 主要
  • vscode CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.解决

    1 问题出现 已安装anaconda并已添加其环境变量 测试在win cmd中输入conda及相关conda activate命令等都是正常的 但当在vscode中run debug工程py脚本时出现以下错误及提示 2 踩坑记录 1 根据提
  • xterm使用详情

    常用配置项 rendererType dom canvas 渲染器类型 当 canvas 渲染器运行过慢时 会回退为 DOM 渲染器 DOM 渲染器下不起作用的功能 Letter spacing Cursor blin cols numbe
  • word页码怎么从第三页开始设置为第一页_Word小技巧

    在使用word编辑文档或者写论文的时候 会涉及到页码的设置 今天粉笔君就来给大家分享一下如何快速正确的设置页码格式 一 第一页为封面 第二页为目录 从第三页开始编码 1 将鼠标固定到文档第二页的第一个字符前 在菜单栏中单击 布局 选项 找到
  • Java+Servlet+Jsp(el, jstl)+MyBatis的CRUD练习小项目

    1 概述 这篇博客主要是分享一个基于Servlet Jsp el jstl MyBatis的CRUD练习小项目 包括项目的源码 以及项目的逻辑 通过这个项目能够学习Java web中最基础的servlet jsp和mybatis的使用 为后
  • 一篇短文告诉你阿里云用户如何通过等保测评

    随着等保2 0的脚步越来越近 云上等保受到越来越多人的关注 近日在成都举行的云栖大会安全论坛上 牛君特意关注了阿里云云上系统的等保合规方案 阿里云最早于2012年通过 ISO 27001 认证 并于2016年9月通过新的云计算安全等级保护三
  • 点云绪论(点云数据及获取、点云数据处理、常用软件及开源库)

    文章目录 点云数据及获取 点云数据处理 常用软件及开源库 点云数据及获取 定义 点云 point cloud 三维点的数据集合属性 三维坐标 强度 颜色 时间戳 点云组织形式 organized the point cloud is lai
  • BG-20k数据集分析及下载

    包含20000张高清背景图片 包含清晰的对象轮廓 可以用做高质量图像生成的研究 此数据集下载流程繁琐 还需要签保证书获得授权等等 可以联系此人 提供高速下载链接 q 2389411778 备注要bg20k数据集
  • centos7 ping: www.baidu.com: Name or service not known

    转自 https www cnblogs com maowenqiang articles 7727910 html root www ping www baidu comping www baidu com Name or service
  • RPC介绍+原理

    RPC 远程过程调用 它是一种通过网络从远程计算机程序上请求服务 而不需要了解底层网络技术的协议 RPC协议假定某些传输协议的存在 如TCP或UDP 为通信程序之间携带信息数据 在OSI网络通信模型中 RPC跨越了传输层和应用层 RPC采用
  • spingboot热部署,实现jsp页面时时刷新

    SpringBoot默认不支持JSP的实时更新 目前有两种解决方案 解决方法1 在配置文件 手工开启实时编译JSP的功能 application yml 配置如下 server jsp servlet init parameters dev
  • 双目标定(三)标定流程(含矫正)

    1 原理 参见单目标定基本原理 2 采集 2 1标定板的制作 大小 应当使得标定板在图像中占比尽可能大一些 占图像长度比例应当超过1 3 如果实在无法保证标定板占图像比例比较大如果占比比较小 则需要尽可能多采集一些图像 平 标定板应当尽可能
  • 单片机基础——使用USART发送和接收数据(DMA模式)

    1 准备工作 硬件准备 开发板 首先需要准备一个小熊派IoT开发板 并通过USB线与电脑连接 2 生成MDK工程 选择芯片型号 打开STM32CubeMX 打开MCU选择器 搜索并选中芯片STM32L431RCT6 配置时钟源 如果选择使用
  • STM32 标准外设SPL库、硬件抽象层HAL库、低层LL库区别?

    1 STM32 之一 HAL库 标准外设库 LL库 ZC Shou的博客 CSDN博客 ll库 仔细阅读 2 STM32标准外设库 HAL库 LL库 King先生 博客园 3 STM32 之 HAL库 戈 扬的博客 仔细阅读 4 STM32
  • sql: SQLite,MySQL,SQL Server

    SQLite 3 CREATE TABLE DuStudentList StudentId INTEGER PRIMARY KEY AUTOINCREMENT StudentName TEXT NOT NULL StudentNO TEXT
  • Oracle 11Gr1监听报错TNS-12542 12560 00512

    环境 Oracle 11Gr1 Linux Redhat 5 重启机器后 数据库监听启动报错如下 TNS 12542 TNS address already in use TNS 12560 TNS protocol adapter err
  • Go_数据类型转换(Sprintf、Format)

    数据类型转换 类型转换是将一种数据类型的变量转为另一种类型的变量 Go强制要求使用显式类型转换 所以语法更能确定语句及表达式的明确含义 转换的时候如果大的转给小的 会有精度损失 数据溢出 比如int64转int8 转换格式 将v转成T类型