«
goLang百分数转整数的方法

时间:2022-4-2    作者:思忆迷往    分类: 代码人生


博主独白

人的成长过程充满了曲折坎坷,在成长的道路上我们需要根据不同的场景不断地变换自己的角色。在家里我们是儿女;在学校我们是学生或教师;结婚了我们是丈夫或妻子;生子了我们是父母……
就像是我们在程序开发编写代码的时候,需要将数据根据需要转换成不同的类型。

正文

前些天遇到一个需求,从一串字符中将n%提取出来,再将n%转换为n,即将字符串类型(string)的n%转换为int类型的n,过程如下:

// 导入需要使用到的包
import (
    // 包 "fmt"主要包含了格式化I/O函数,类似于C语言的printf和scanf。格式字符串的规则来源于C语言,但更简单一些。
    "fmt"

    // 包 “strconv” 主要包含了对字符串和基本数据类型之间的转换函数。
    // 基本数据类型包括:布尔、整型(包括有/无符号、二进制、八进制、十进制和十六进制)和浮点型等。
    "strconv"
)

func main(){
    // 要转换的目标对象
    v1 := "37%"

    /*
        1、先转换成切换,然后再转换成string类型,当然也可以这样写:v2 := v[:len(v)-1](为什么要这样转,和字符编码有关,这里还涉及到GO语言的性能问题,还是新手先会用就行,以后进阶研究一下)
        2、len() 是获取字符串的长度的函数
        3、[:len(v)-1] 指定切片的长度,具体理解就是截取 “37%” 除 “%” 以外的其他内容,因为 “%” 前面的数字长度可能是不固定的甚至可能出现小数的情况,所以在处理的时候不能事先指定长度,只能通过动态计算出字符长度
    */
    v2 := string([]byte(v)[:len(v)-1])

    // 最后通过 "strconv"包的Atoi函数将string转换为int
    // Atoi函数有两个返回值,result和error,如果不需要抛出异常可以把error赋值变量写为“_”,如“v3,_ := usageNum, _ := strconv.Atoi(v2)”
    v3,err := usageNum, _ := strconv.Atoi(v2)
    if (err!=nil) {
        fmt.Println(err.Error())
    }

    fmt.Printf("v3: %v, type: %T\n", v3, v3) // v3: 37, type: int
}

后语

肯定有人会问为什么不直接把数字提取出来而是要这么麻烦进行转换呢?不要杠!只是场景需要。当然,这个只是我会的方法欢迎各位大老留言提供其他方法供本萌新学习。