1、问题

最近接手一个商城运单号模块,接手后发现有部分运单号返回给前端是按照科学计数法的方式返回,如:8.0497183772403904E+17,后查库发现这些运单号在excel导入的时候就是按照科学计数法导入,没做任何处理。

按照科学计数法的形式返回给用户运单号,这样太不友好了,简直就是bug,所以需要进行转换处理后再返回给用户。

2、问题修复

面向谷歌编程,找到了以下方法进行转换:

第一种:

oldNum := float64(8.0497183772403904E+17)

newNum := big.NewRat(1, 1)

newNum.SetFloat64(oldNum)

fmt.Println(newNum.FloatString(0))

结果:

804758523075821952

第二种:

varnewNum float64

numStr := "8.04758523075822e+17"_, err := fmt.Sscanf(numStr, "%e", &newNum)if err !=nil {

log.Errorf("fmt.Sscanf error, numStr:%s, err:%v", numStr, err)return}

num := fmt.Sprintf("%.f", newNum)

fmt.Println(num)

结果:

804758523075821952

以上两种转出来的都会精度有所丢失,具体原因未知,现在还未去深究,有知道的朋友希望可以评论回复解答一下,谢谢。

第三种:

以上两种都存在丢失的问题,起初是不知道的,后面通过java进行转换了才发现真的丢失了java代码如下:

BigDecimal bd = new BigDecimal("8.04758523075822e+17");

System.out.println(bd.toPlainString());

结果:

804758523075822000

java既然可以通过BigDecimal进行转换,那golang肯定也可以(很不幸我使用的是go1.11.2没找到decimal的相关包支持,只能面向github编程了),在github中找到了一个较多人使用的包 github.com/shopspring/decimal

使用代码如下:

//先安装包 go get github.com/shopspring/decimal

numStr := "8.04758523075822e+17"decimalNum, err := decimal.NewFromString(numStr)if err !=nil {

log.Errorf("decimal.NewFromString error, numStr:%s, err:%v", numStr, err)return}

fmt.Println(decimalNum.String())

结果:

804758523075822000

3、总结

在进行科学计数法的数字转string数字的时候,最好还是使用第三种方法,这样不会精度丢失的情况。当然导入excel的业务上要做好判断处理,若是纯数字运单号入库就应该是纯数字而不是科学计数法的形式。

package main

import ("encoding/json"

"fmt"

"github.com/shopspring/decimal"

"strconv"

//"github.com/shopspring/decimal"

)

type abcstruct{

Goods_id float64 `json:"goods_id"`

Goods_namestring `json:"goods_name"`

}

func main(){

a := `{"goods_id":1.1572417766286e+18,"goods_name":"LM358"}`

aaa := &abc{}

err := json.Unmarshal([]byte(a),aaa)if err !=nil{

fmt.Println(err)

}

fmt.Println(aaa)

decimalNum, err :=decimal.NewFromString(strconv.FormatFloat(aaa.Goods_id, 'e', -1, 64))if err !=nil {return}

fmt.Println(decimalNum.String())

}

D:\gocode1.14\go-micro-code\gjj>go run main.go&{1.1572417766286e+18LM358}1157241776628600000

golang把数字变字符串_Golang科学计数法转换string数字输出相关推荐

  1. python 科学计数法转换成数字_JS如何将科学计数法转换成数字或者字符串?

    今天遇到这个问题.... function sumStrings(a, b) {//输入的a,b都是只包含数字的字符串 var output; output = a * 1 + b * 1;//转换为 ...

  2. golang把数字变字符串_Golang - 数字转字符串

    发现go语言内置的数字转字符串较为复杂,需要使用strconv的库,特别是float转字符串.可以单独写一个文件处理数字转字符串,便于调用. package main import ( "s ...

  3. [js] 写一个方法把科学计数法转换成数字或者字符串

    [js] 写一个方法把科学计数法转换成数字或者字符串 function c(a) { return a.replace(/^(\d+)(?:.(\d+))*eE(\d+)/,(_,a,a1,p,n)= ...

  4. PHP科学计数法转换成数字

    /** * 科学计数法转换成数字 * @param $num * @param int $double * @return int */ function sctonum($num, $double ...

  5. 解决使用phpspreadsheet导出Xlsx纯数字字符串变成科学计数法的问题

    Demo: <?php $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $spreadsheet->getActiv ...

  6. php科学计数法转string,php如何将科学计数法转数字

    php将科学计数法转数字的实现方法:首先通过if语句判断指定的数值是否为科学计数法:然后提取科学计数法中有效的数据:接着正式处理该数据:最后调用"convert_scientific_num ...

  7. 帆软finereport导出excel的数字过长变成科学计数法的解决方法

    科学计数法这种鬼东西,其实一般人是完全用不到的,即使是研究数学的,用科学计数法去表示数字也会造成精度的损失,真不知道为什么excel要默认使用这种垃圾东西. 好了,不吐槽了,简单说一下怎么解决吧,百度 ...

  8. MySQL导出csv文件,数字过长出现科学计数法的问题

    原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 问题描述: 使用 MySQL 客户端工具导出 excel 数据,如果某个字段为纯数字,并且 length 过长,在导出的文件中,它就会以科 ...

  9. excel 科学计数法转换成文本完整显示_避免万次暴击,巧办法解决数字和文本之间的快速转化...

    很多朋友在在数据整理的过程中都遇到过下图这种情况,大量数字内容,因为数字内容较长,excel以科学计数法进行了显示,多数时候我们会选中列设置单元格格式为文本,但单元格内容并不会转化为文本,需要对每个单 ...

最新文章

  1. 我用 YOLOv5 做情感识别!
  2. Centos7安装Python3并更改默认版本为python3(编译安装)
  3. JAVA程序设计----异常
  4. python的out模式_如何用python中的DataFrame列的模式替换NA值?
  5. Win系统利用本地安全策略全面禁止360等软件的安装与运行-1
  6. 超好:web app变革之rem
  7. Elasticsearch7.15.2 mysql8.0.26 logstash-input-jdbc 数据全量索引构建
  8. 《微信小程序开发入门精要》——第2章,第2.8节带边距的水平等间隔排列
  9. 单片机自动浇花器答辩记录_一个塑料瓶一颗螺丝,教你做自动浇花器,再不担心花草没人浇水了...
  10. IDM下载器最新版本6.32.7
  11. 解决远程桌面不能用大法
  12. matlab提高循环运行效率,提高MATLAB运行效率
  13. 圆弧周长公式_弧长的计算公式是什么?
  14. python傅里叶变换 信号处理 序列_(十六)数字图像处理中的傅里叶(DFT/FFT)
  15. Excel如何批量重命名文件
  16. node.js解析word文档
  17. 接耦与单元测试可测性
  18. 10款可视化大屏特效,酷炫又内涵!
  19. reactor模式学习
  20. no ip mroute-cache是什么意思

热门文章

  1. 基于Quick-cocos2d-x的资源更新方案
  2. 超高性能混凝土(UHPC)结构设计学习笔记
  3. android java 除法_android中如何实现除法的保留小数点后...
  4. uniapp中注册手机号短信验证码
  5. Install PostgreSql 10 to Fedora 27
  6. pytorch用FCN语义分割手提包数据集(训练+预测单张输入图片代码)
  7. 时间块青春版android版,时间块青春版与标准版
  8. 主流计算机的配置软件,电脑主流配置2020推荐
  9. QQ2010的个人文件夹结构
  10. byte数组转16进制 java_如何在Java中将字节数组转换为十六进制格...