美文网首页
「Go」ParseInt

「Go」ParseInt

作者: 叨码 | 来源:发表于2020-06-01 11:34 被阅读0次

本系列文章由刀码旦编写,转载请注明出处

func ParseInt(s string, base int, bitSize int) (i int64, err error) 

参数概述

返回字符串表示的整数值,接受正负号。
base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制;
bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64;返回的err是*NumErr类型的,如果语法有误,err.Error = ErrSyntax;如果结果超出类型范围err.Error = ErrRange。

起初我的理解,以为bitSize参数指定的是需要返回的int类型,比如int8 、int16、int32、int64。你指定什么就返回什么类型的int,只要不溢出。
但是通过代码实践却发现不是这么回事

var str1 string = "12"
var n1 int8
n1 ,_ = strconv.ParseInt(str1,10,8)

会有错误提示

Cannot assign int64 to n1 (type int8) in multiple assignment
同理你指定其他类型也同样报错。
只有你指定n1 为int64才正确

var str1 string = "1234"
var n1 int64
n1 ,_ = strconv.ParseInt(str1,10,8)
fmt.Printf("n1 type %T,n1=%v",n1,n1)

结果输出

n1 type int64,n1=127

不管你传入的bitSize是(0、8、16、32、64)中哪一个,结果类型都是int64。
也就是说明,parseInt函数的返回值就是int64的,不是bitSize来决定的

那bitSize到底什么作用呢,其实bitSize可认为实际上做了校验的功能,比如下面的代码会报错

var str1 string = "1234"
 n1, err := strconv.ParseInt(str1, 10, 8)
 fmt.Println(n1) // 此时tmp = 127
 if err != nil {
      log.Fatal(err)  // strconv.ParseInt: parsing "1234": value out of range
 }

那是因为int8范围为[-128~127]

如果你需要得到其他类型的返回值可以这样干,强制将int64转换成你需要的类型

var n1 int64
n1, _ = strconv.ParseInt("123", 10, 0)
numInt := int(n1)
numUint := uint(n1)
numInt32 := int32(n1)
fmt.Println(numInt, numUint, numInt32)

综上所述,由于go语言是强类型的特性,所以第一个返回值必须是int64类型,因此你的num也必须是int64类型,不管你要转换成什么都必须把num声明成int64,当你知道要转换字符串是在某个范围内,那就把bitSize填成对应位即可,这样转换时也会检查是否越界

相关文章

  • 「Go」ParseInt

    本系列文章由刀码旦编写,转载请注明出处 参数概述 返回字符串表示的整数值,接受正负号。base指定进制(2到36)...

  • parseInt的细节知识

    parseInt经典面试题 parseInt语法 parseInt(string, radix)string 必需...

  • 工作中遇到的一些IE兼容性/JS问题收集整理

    1. parseInt(“08”),parseInt("09") 输出0 (IE 8) 使用parseInt("...

  • parseInt第二个参数学习

    parseInt语法: parseInt(string, radix) 之前使用parseInt的时候,大部分都是...

  • JavaScript与数值相关的全局方法

    parseInt() parseInt方法可以将字符串转为整数。 parseInt方法也可以做进制转换 1 par...

  • parseInt

    使用parseInt parseInt只能转字符串,其他的数据类型不能转 NaN代表非数字 parseInt也可以...

  • JS截取字符串中数字

    使用parseInt() var str ="4500元"; var num = parseInt(str); a...

  • 搜集整理经典面试题

    一、 arr.map(parseInt) 示例: 解析: parseInt(string, radix) 解析...

  • parseInt()

    // 如果使用Number()函数把字符串转为number类型,字符串必须是纯数字,如果有其他字符,则转完的结果是...

  • parseInt()

    parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。 如果方法有两个参数, 使用第二个参数指...

网友评论

      本文标题:「Go」ParseInt

      本文链接:https://www.haomeiwen.com/subject/kcujzhtx.html