如何处理Golang中int64类型变为科学计数法?

编程入门 行业动态 更新时间:2024-10-14 10:41:37

<a href=https://www.elefans.com/category/jswz/34/1771197.html style=如何处理Golang中int64类型变为科学计数法?"/>

如何处理Golang中int64类型变为科学计数法?

背景

这周时候在处理订单消息传递的时候,发现定义的orderID大多数时候是正常的(例如:1152921570135310348)偶现科学计数法(例如:1.1529215701353103e+18)。

传参的结构是这样的:map[string]interface{}
赋值:data[“id”] = 1152921570135310348

后面就开始调接口,记录日志等一系列操作。查了一会儿发现正常流程是不会导致变成科学计数法的。

后面偶然发现原来的一个通过mq补偿的逻辑导致的。
主要原因是因为走了json.Marshal()导致的。

解决

这里提供两种方式解决这个问题。

1.赋值的时候用string类型

func main() {data := make(map[string]interface{})// 关键是这里。主要想表达,用字符串就没问题data["id"] = "1152921570135310348"dataJson,_ := json.Marshal(data)fmt.Println(string(dataJson))// 解json var dataDecode map[string]interface{}v,_:=strconv.ParseFloat("1000000", 64)fmt.Println(v)_ = json.Unmarshal(dataJson, &dataDecode)fmt.Println(dataDecode)
}

输出:

{"id":"1152921570135310348"}
map[id:1152921570135310348]

2.使用json的useNumber属性

func main() {data := make(map[string]interface{})data["id"] = 1152921570135310348dataJson,_ := json.Marshal(data)fmt.Println(string(dataJson))var dataDecode map[string]interface{}// 关键是这里开始的三行~底层在输出的时候会进行格式化防止出现科学计数法d := json.NewDecoder(bytes.NewReader(dataJson))d.UseNumber()_ = d.Decode(&dataDecode)fmt.Println(dataDecode)
}

输出:

{"id":1152921570135310348}
map[id:1152921570135310348]

如果你觉得有收获~可以关注我的公众号【咖啡色的羊驼】~第一时间收到我的分享和知识梳理~

更多推荐

如何处理Golang中int64类型变为科学计数法?

本文发布于:2024-03-14 14:24:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736667.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何处理   类型   科学   Golang

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!