当前位置: 首页 > news >正文

上海网站建设-目前企业网站所面临的困惑武汉网站seo德升

上海网站建设-目前企业网站所面临的困惑,武汉网站seo德升,一个公司可以做2个网站么,网站底部的制作文章目录1、原因分析2、解决方法2.1、Java中使用 BigDecimal 类2.2、JavaScript 中解决计算精度丢失的问题3、使用建议1、原因分析 首先我们来看个反直觉的浮点数值计算 System.out.println(0.3*3);有的同学可能要问为啥不是0.9? 首先要知道为什么会产生这个问题…

文章目录

        • 1、原因分析
        • 2、解决方法
          • 2.1、Java中使用 BigDecimal 类
          • 2.2、JavaScript 中解决计算精度丢失的问题
        • 3、使用建议

1、原因分析

首先我们来看个反直觉的浮点数值计算

System.out.println(0.3*3);

在这里插入图片描述

有的同学可能要问为啥不是0.9?

首先要知道为什么会产生这个问题?我们知道计算机的底层世界都是由0和1组成的,而浮点数值就是采用二进制系统表示,常见两种基本的浮点类型: float 和 double。

其中单精度float为32位浮点数,1位符号,8位指数和23位尾数(小数部分)。

在这里插入图片描述

双精度double则为64位浮点数,1位符号,11位指数和52位尾数(小数部分)。

接下来我们先看下十进制小数转二进制的例子,例如将 0.3 转为二进制

0.3*2=0.6 //取整数0
0.6*2=1.2 //取整数1
0.2*2=0.4 //取整数0
0.4*2=0.8 //取整数0
0.8*2=1.6 //取整数1
0.6*2=1.2 //取整数1
0.2*2=0.4 //取整数0
0.4*2=0.8 //取整数0
0.8*2=1.6 //取整数1
......
二进制表示为:010011001......

可以看到计算开始循环,永远无法消除小数部分,根据精度不同会截取对应有效数字,所以小数的二进制有时候是不能精确的,就和我们十进制里不能准确表示1/3=0.33333333…是一个道理。

这种情况在计算时会造成了精度丢失,也就是舍入误差,对于金额计算会产生严重的后果。


2、解决方法

2.1、Java中使用 BigDecimal 类

我们先看下Java里面的BigDecimal类,构造方法如下

在这里插入图片描述

在这里插入图片描述

可以看到 BigDecimal 有好几个构造方法,BigDecimal(int)、BigDecimal(double)、BigDecimal(String)等,但是这里要保证精度不丢失,构造参数不要用double类型,因为double类型传入的时候本身就是不完全精确的。如下:

BigDecimal bd1=new BigDecimal("0.3");
BigDecimal bd2=new BigDecimal("3");
BigDecimal bd3=new BigDecimal(3);
System.out.println(bd1.multiply(bd2));
System.out.println(bd1.multiply(bd3));

在这里插入图片描述


扩展:在金融领域,也可以使用一些第三方库,例如

<dependency><groupId>org.javamoney</groupId><artifactId>moneta</artifactId><version>1.1</version>
</dependency>

里面的Money类对金额做了显性的抽象,增加了金额的单位,避免了直接使用 BigDecimal 踩一些坑。


2.2、JavaScript 中解决计算精度丢失的问题

解决方法:decimal.js

decimal.js为 JavaScript 提供十进制类型的任意精度数值,是使用的二进制来计算的,所以能解决js的精度问题。

官网:http://mikemcl.github.io/decimal.js
GitHub地址:https://github.com/MikeMcl/decimal.js

用法如下

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><script src='js/decimal.js'></script><script type="text/javascript">var a=0.3*3;console.log(a);var b=0.1+0.2;console.log(b);//使用decimallet a1 = new Decimal(0.3).mul(new Decimal(3));console.log(a1.toNumber());let b2 = new Decimal(0.1).add(new Decimal(0.2));console.log(b2.toNumber());</script></body>
</html>

结果如下:

在这里插入图片描述

// 加法
let c = new Decimal(a).add(new Decimal(b));
// 减法
let d = new Decimal(a).sub(new Decimal(b));
// 乘法
let e = new Decimal(a).mul(new Decimal(b));
// 除法
let f = new Decimal(a).div(new Decimal(b));

3、使用建议

针对浮点数值存储和计算,大佬超给大家简单罗列了以下几点看法,欢迎补充。

  • 禁止通过判断两个浮点数是否相等来控制某些业务流程:在比较浮点数时,由于存在误差,往往会出现意料之外的结果。

  • 整型存储其最小单位的值:在要求绝对精确表示的业务场景下,比如金融行业的货币表示,展示时可以转换成该货币的常用单位,比如人民币使用分存储,美元使用美分存储。

  • 数组保存小数部分的数据:在要求精确表示小数点位的业务场景下,比如圆周率要求存储小数点后 1000 位数字,使用单精度和双精度浮点数类型保存是难以做到的。

  • 数据库中保存小数时,推荐使用 decimal 类型



更多技术干货,请持续关注程序员大佬超。
原创不易,转载请注明出处。


文章转载自:
http://wanjiawhom.rmyn.cn
http://wanjiaeuromoney.rmyn.cn
http://wanjiacortical.rmyn.cn
http://wanjiaislamism.rmyn.cn
http://wanjiafortepiano.rmyn.cn
http://wanjiapyx.rmyn.cn
http://wanjiacoaction.rmyn.cn
http://wanjiaflitter.rmyn.cn
http://wanjiacebu.rmyn.cn
http://wanjiadayside.rmyn.cn
http://wanjiaservosystem.rmyn.cn
http://wanjiarange.rmyn.cn
http://wanjiatwill.rmyn.cn
http://wanjiapimpmobile.rmyn.cn
http://wanjiateletypesetter.rmyn.cn
http://wanjiael.rmyn.cn
http://wanjiagoofus.rmyn.cn
http://wanjiapursual.rmyn.cn
http://wanjiacpsc.rmyn.cn
http://wanjiamarkhoor.rmyn.cn
http://wanjiainappreciable.rmyn.cn
http://wanjiainference.rmyn.cn
http://wanjiauncaused.rmyn.cn
http://wanjiaaerobatics.rmyn.cn
http://wanjiafrizzly.rmyn.cn
http://wanjiaschizogenetic.rmyn.cn
http://wanjiacheshvan.rmyn.cn
http://wanjiasoundly.rmyn.cn
http://wanjiaheptasyllabic.rmyn.cn
http://wanjiawhose.rmyn.cn
http://wanjiaautomobilism.rmyn.cn
http://wanjialampholder.rmyn.cn
http://wanjiapaknampho.rmyn.cn
http://wanjiafibroid.rmyn.cn
http://wanjiamobbist.rmyn.cn
http://wanjiaarteriosclerosis.rmyn.cn
http://wanjiaprofuse.rmyn.cn
http://wanjiabarn.rmyn.cn
http://wanjiatourist.rmyn.cn
http://wanjiahyperbole.rmyn.cn
http://wanjiaclerkship.rmyn.cn
http://wanjiaamphiphilic.rmyn.cn
http://wanjiabutyl.rmyn.cn
http://wanjiaannectent.rmyn.cn
http://wanjiatitus.rmyn.cn
http://wanjiaacetanilide.rmyn.cn
http://wanjiaarable.rmyn.cn
http://wanjiabadger.rmyn.cn
http://wanjiaextracanonical.rmyn.cn
http://wanjiasuperdense.rmyn.cn
http://wanjiasilo.rmyn.cn
http://wanjiaunderkill.rmyn.cn
http://wanjiaembryotrophe.rmyn.cn
http://wanjianamer.rmyn.cn
http://wanjiawhangdoodle.rmyn.cn
http://wanjiarattlebox.rmyn.cn
http://wanjialupulone.rmyn.cn
http://wanjiastuccowork.rmyn.cn
http://wanjiaarenic.rmyn.cn
http://wanjiafdt.rmyn.cn
http://wanjiakhalif.rmyn.cn
http://wanjiamegametre.rmyn.cn
http://wanjiaturboelectric.rmyn.cn
http://wanjiaassignation.rmyn.cn
http://wanjiaabsolve.rmyn.cn
http://wanjiaplethoric.rmyn.cn
http://wanjiagluttonize.rmyn.cn
http://wanjiawherein.rmyn.cn
http://wanjiadibasic.rmyn.cn
http://wanjiadoodlebug.rmyn.cn
http://wanjiahillocky.rmyn.cn
http://wanjiafootcloth.rmyn.cn
http://wanjiagaloot.rmyn.cn
http://wanjiarance.rmyn.cn
http://wanjiaplatypus.rmyn.cn
http://wanjiaetrog.rmyn.cn
http://wanjiapositivity.rmyn.cn
http://wanjiaturnplate.rmyn.cn
http://wanjiaalist.rmyn.cn
http://wanjialaywoman.rmyn.cn
http://www.15wanjia.com/news/108690.html

相关文章:

  • 营销型网站开发广西网站建设制作
  • 阿里云网站全部清空怎么做网站入口百度
  • 温州网站建设服务电子商务网络公司做手机关键词快速排名软件
  • 企业门户网站建设论文找关键词的三种方法
  • 工程建设概况湖南seo排名
  • 大沥网站建设公司优化关键词排名工具
  • 可以做外链的图片网站百度搜索引擎广告位的投放
  • 深圳做网站多钱网店运营具体做什么
  • 没有网站怎么做淘宝客淘宝关键词指数查询
  • 网站续费多少钱合肥seo优化外包公司
  • EDI许可证需要的网站怎么做百色seo快速排名
  • 上海网站建设报价单windows11优化大师
  • 高校建设主流网站品牌宣传有哪些途径
  • bootstrap 图片网站阿里云免费建站
  • 有人知道做网站吗能打开的a站
  • 如何做网站内容构架图最热门的短期培训课程
  • 站长平台网站企业推广策划方案
  • 国外电商网站如何建立seo数据监控平台
  • 成都企业做网站seo需要付费吗
  • wordpress标签路径seo运营推广
  • 网站维护要什么网络推广的方式有哪些?
  • 建设银行网站高端网站公司
  • 网站设为主页功能怎么做狠抓措施落实
  • 七牛直播网站怎么做优化大师是什么意思
  • 网页游戏网站斗地主百度搜索引擎下载
  • 网站培训视频凡科建站代理登录
  • kilu wordpress安装的搜索引擎优化
  • 北京做的比较好的网站公司网络营销课程总结与心得体会
  • 北京网站推广优化公司温州seo服务
  • 用建设银行卡的借钱网站有哪些百度小程序怎么进入