首页 > 其他分享 >golang 关于 Inf,-Inf,Infinity,-Infinity 等无穷大无穷小特殊字符转换问题

golang 关于 Inf,-Inf,Infinity,-Infinity 等无穷大无穷小特殊字符转换问题

时间:2023-05-15 23:55:07浏览次数:35  
标签:无穷大 Infinity 无穷小 写入 golang 字符串 Inf

记录一个比较个例的问题,某天API突然写入数据失败,原因是数据库写入长度超出,并且从日志中发现了 "Infinity" 这样的特殊字符串

英语渣渣的我有懵,客户端发过来的数据,API都会转换为对应的数据类型,再进行数据库写入,如果是字符串,最多就转成0,怎么会长度超出

万变不离其宗,肉眼看不出的问题(哈哈 其实就是知识界有限),那就打断点,看看这个字符串究竟被转化成什么

 可以看到,“Infinity” 通过 strconv.ParseFloat 转换为 +Inf ,即无穷大

后面通过尝试,发现 Inf,-Inf,Infinity,-Infinity 这些特殊字符串,都是可以被识别转换为无穷大无穷小

因为数据库设置的字段类型是 decimal ,写入无穷大的值,自然是长度超出

 

找到问题所在,那么接下来就是要解决啦

正常API业务处理,无论是 无穷大 还是 无穷小 都属于不合法的参数值,可按0处理

所以在 strconv.ParseFloat 加了个 判断 参数值 含英文字母,即返回  0  

 

这是检查字符串是否含英文字母的工具方法 

func ContainsEnglish(str string) bool {   dictionary := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"   for _, v := range str {     if strings.Contains(dictionary, string(v)) {       return true     }   }   return false }

 

End.

night nice~~

 

 

标签:无穷大,Infinity,无穷小,写入,golang,字符串,Inf
From: https://www.cnblogs.com/ecake/p/17403498.html

相关文章

  • ERROR: Command errored out with exit status 1: python setup.py egg_info Check th
     001、在利用python2.7环境下利用pip安装pyfaidx模块时报如下错误:ERROR:Commanderroredoutwithexitstatus1:pythonsetup.pyegg_infoCheckthelogsforfullcommandoutput. 002、查看pip版本[root@PC1pip]#pip--versionpip20.3.4from/usr/lib/pyth......
  • 龙蜥产品生态总监做客 InfoQ:后 CentOS 时代,国产操作系统能否扛起大旗?
    随着CentOS全面停服即将进入尾声,企业选择一款既可保障系统稳定运行,又可提供专业技术支持的操作系统迁移显得尤为重要。那么,现存的CentOS以及衍生版用户或将面临哪些风险?一套完整的迁移方案应该包括哪些步骤?在当下众多的迁移版本中如何选择符合市场发展诉求的操作系统……相信大......
  • openEuler 成功适配 LeapFive InFive Poros 开发板
    近日,openEulerRISC-V23.03创新版本在跃昉科技的Poros开发板上成功运行。openEuler在Poros上适配成功,XFCE桌面启动正常,文件系统、终端模拟器和输入法等相关GUI应用也运行流畅,Chromium浏览器和LibreOffice等应用也得到了支持。目前,图形界面依靠LLVMpipe渲染,后续跃昉......
  • Golang基础--context的用法
    context包是go并发中常用的包,用于设置截至日期,同步信号,传递请求相关的值。应用场景每一个http请求的request都会启动一个goroutine处理这个请求,后续跟进的这个请求可能还需要访问数据库,做安全验证,访问控制,日志记录等,这时候就会由最早的goroutine启动后续的多个goroutine,这......
  • Golang后端研发岗位的面试笔记整理
    今年互联网行情真不太行,暑期实习投了十几家,在经历了各种一面挂和二面挂后,终于在最后拿到了百度的暑期实习offer,真的不容易,中间一度被面试搞得怀疑人生,太难了QAQ这是本人花了点时间整理的一些与Golang后端研发岗位相关的面试笔记,欢迎大家及时补充当然并不局限于Golang研发岗位,......
  • golang vrrp 包
    vrrp是一个比较有用的功能,可以实现业务访问的的高可用,keepalived就使用了此协议(当然还集成了lvs)此包是基于了社区提供的VRRP-go包调整的,解决了一些问题:比如不是gomod的,部分依赖三方包不兼容参考使用gomod gomodinitgithub.com/rongfengliang/demoappv......
  • 解决docker search influxdb 报错Error response from daemon: Get "https://index.do
    解决dockersearchinfluxdb报错Errorresponsefromdaemon:Get"https://index.docker.io/v1/search?q=influxdb&n=25":dialtcp:lookupindex.docker.ioon192.168.12.2:53:readudp192.168.12.128:39189->192.168.12.2:53:i/otimeoutdockerpull&......
  • golang多版本管理工具g
    一、golang多版本管理工具g 一)g简介g是一个Linux、macOS、Windows下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换 二)g特性支持列出可供安装的go版本号支持列出已安装的go版本号支持在本地安装多个go版本支持卸载已安装的go版本支持在已安装的go版本......
  • DisCor: Corrective Feedback in Reinforcement Learning via Distribution Correctio
    发表时间:2020(NeurIPS2020)文章要点:这篇文章想说,对于监督学习来说就算刚开始训的不准,后面的新数据也会给你正确的feedback,这样的话随着训练进行,总会修正之前的错误。但是对于像Q-learning这样的强化学习任务来说,不存在这样的feedback,因为更新是通过bootstrapping的方式更新的,......
  • golang 实现一个自动注入跟踪代码工具
    如下面代码所示:packagemainimport("bytes""fmt""runtime""strconv")/**实现一个自动注入跟踪代码,并输出有层次感的函数调用链跟踪命令行工具.*/funcTrace()func(){//通过runtime.Caller函数获得当前Goroutine的函数调用栈上的信息,......