前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >double转long引发的一次线上故障

double转long引发的一次线上故障

原创
作者头像
用户10329080
发布2023-04-13 07:59:27
1.2K0
发布2023-04-13 07:59:27
举报
文章被收录于专栏:知识互联、传递正能量

问题背景

问题:部分客户订单页面展示异常问题

原因:double类型转成long类型,精度损失导致线上的故障。

下面为出现问题的具体代码

问题验证

我们看下面会分别输出什么结果:

代码语言:javascript
复制
837378982649737216
837378982649737276
837378982649737276

为什么精度会丢失:

double类型占用64位

1bit(符号位)

11bit(指数位)

52bit(尾数位)

科学计数法:拿十进制举例子:1.23x10的9次方:1.23就是尾数,9就是指数

所以double类型表示的数的范围是比long类型要大,但是,由于浮点数是基于科学计数法的,因此它们不能精确地表示某些值,例如非常大或非常小的数字。因为尾数位只用了52bit来表示。

建议:

禁止直接将double类型转成long类型,对于一些高精度计算推荐使用BigDecimal

BigDecimal是Java中提供的一种高精度数字类型,它可以表示任意精度的十进制数值,计算过程中不会有精度损失。

由于BigDecimal类型提供了高精度的数字计算功能,因此通常用于需要精确计算的金融应用程序、科学计算和工程计算等领域。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 问题验证
  • 为什么精度会丢失:
  • 建议:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档