范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

源码分析double和BigDecimal区别

  一:double分析
  double 类型的底层实现是使用 IEEE 754 标准来表示浮点数。在 Java 中,double 类型的变量占用 8 个字节,其中 1 个字节用于表示符号位,11 个字节用于表示指数,剩余的 52 个字节用于表示尾数。由于尾数只有 52 个字节,因此 double 类型能够精确表示的数字是有限的。在 Java 中,double 类型的值可以用以下公式来计算:value = (-1)^s * m * 2^e
  其中,s 表示符号位,m 表示尾数,e 表示指数。在 double 类型中,符号位占用 1 个字节,尾数占用 52 个字节,指数占用 11 个字节。
  在 double 类型中,尾数使用二进制表示,指数使用移位表示。具体来说,指数的值先减去 1023,然后再左移 52 位。这样可以将指数的二进制表示与尾数的二进制表示拼接起来,得到一个 64 位的二进制数,表示一个 double 类型的值。
  double 类型的运算是通过对二进制数进行位运算来实现的。例如,两个 double 类型的值相加时,先将它们的二进制表示对齐,然后逐位相加,并将进位的部分保存下来。这样可以保证精度,并避免浮点数精度问题导致的计算错误。二:BigDecimal分析
  BigDecimal 类的底层实现是使用一个整数数组来表示一个高精度的十进制数字。在 Java 中,BigDecimal 类的实现方式可以分为两种:基于 int 数组的实现方式和基于 long 数组的实现方式。这两种实现方式的区别在于使用的数组类型不同,但它们的原理都是一样的。
  在 BigDecimal 类中,每个数字都是用一个 int 或 long 类型的变量来表示的。例如,对于一个十进制数 123456789,可以使用一个 int 数组来表示它:int[] digits = {9, 8, 7, 6, 5, 4, 3, 2, 1};
  在 BigDecimal 类中,还定义了一些常量,例如 ZERO、ONE、TEN 等。这些常量都是 BigDecimal 类型的对象,用于表示常见的数字。
  BigDecimal 类提供了各种精确计算方法,包括加、减、乘、除等操作。在进行这些操作时,BigDecimal 类会根据实际情况选择合适的算法来保证精度。例如,在进行加法操作时,BigDecimal 类会将两个 BigDecimal 对象的小数部分对齐,然后逐位相加,并将进位的部分保存下来。这样可以保证精度,并避免浮点数精度问题导致的计算错误。常用方法
  BigDecimal 是 Java 中用于高精度计算的数据类型,它提供了很多常用的方法来进行数值计算和格式化。下面是一些常用的 BigDecimal 方法和示例代码:add(BigDecimal augend):将该 BigDecimal 与指定的 BigDecimal 相加。BigDecimal bd1 = new BigDecimal("10.5"); BigDecimal bd2 = new BigDecimal("20.3"); BigDecimal result = bd1.add(bd2); System.out.println(result); // 输出 30.8subtract(BigDecimal subtrahend):将该 BigDecimal 减去指定的 BigDecimal。BigDecimal bd1 = new BigDecimal("10.5"); BigDecimal bd2 = new BigDecimal("20.3"); BigDecimal result = bd2.subtract(bd1); System.out.println(result); // 输出 9.8multiply(BigDecimal multiplicand):将该 BigDecimal 与指定的 BigDecimal 相乘BigDecimal bd1 = new BigDecimal("10.5"); BigDecimal bd2 = new BigDecimal("20.3"); BigDecimal result = bd1.multiply(bd2); System.out.println(result); // 输出 213.15pide(BigDecimal pisor, int scale, RoundingMode roundingMode):将该 BigDecimal 除以指定的 BigDecimal,并指定小数点后保留的位数和舍入模式。BigDecimal bd1 = new BigDecimal("10.5"); BigDecimal bd2 = new BigDecimal("20.3"); BigDecimal result = bd2.pide(bd1, 2, RoundingMode.HALF_UP); System.out.println(result); // 输出 1.93setScale(int newScale, RoundingMode roundingMode):设置小数点后保留的位数和舍入模式。BigDecimal bd1 = new BigDecimal("10.555"); BigDecimal result = bd1.setScale(2, RoundingMode.HALF_UP); System.out.println(result); // 输出 10.56intValue():将该 BigDecimal 转换为 int 类型。BigDecimal bd1 = new BigDecimal("10.5"); int result = bd1.intValue(); System.out.println(result); // 输出 10doubleValue():将该 BigDecimal 转换为 double 类型。BigDecimal bd1 = new BigDecimal("10.5"); double result = bd1.doubleValue(); System.out.println(result); // 输出 10.5toString():将该 BigDecimal 转换为 String 类型。BigDecimal bd1 = new BigDecimal("10.5"); String result = bd1.toString(); System.out.println(result); // 输出 10.5
  需要注意的是,在使用 BigDecimal 进行计算时,应该使用 BigDecimal 的方法进行计算,而不是使用 double 进行计算后再转换成 BigDecimal。因为这样可能会导致精度问题。例如:double a = 0.1; double b = 0.2; BigDecimal x = new BigDecimal(a); // 将 double 转换成 BigDecimal BigDecimal y = new BigDecimal(b); // 将 double 转换成 BigDecimal BigDecimal z = x.add(y); // 使用 BigDecimal 进行计算
  在上面的代码中,先将 double 类型的变量转换成 BigDecimal,然后使用 BigDecimal 进行相加操作。但是,由于 double 类型的变量已经存在精度误差,所以再将其转换成 BigDecimal 时,这种精度误差也会被保留下来。因此,得到的结果仍然是不精确的。三:BigDecimal精度高原因
  BigDecimal 的精度比 double 高的原因在于它使用了十进制表示法,而 double 使用的是二进制表示法。在十进制表示法中,每一位都代表一个十进制的数,因此可以精确地表示小数。而在二进制表示法中,有些小数无法精确表示,例如 0.1 在二进制中是无限循环小数 0.0001100110011...,因此在计算机中以二进制形式存储时会存在精度损失。
  BigDecimal 的另一个优势是可以设置任意精度,而 double 的精度是有限的。这意味着 BigDecimal 可以处理任意位数的小数,而 double 只能处理 15 到 17 位小数。四:两者使用场景
  double 和 BigDecimal 都是 Java 中表示浮点数的数据类型,但它们有不同的使用场景。double :高速计算
  例如科学计算、图形处理等。double 使用 64 位来存储一个浮点数,可以表示的范围为正负 1.7976931348623157 x 10^308,精度为 15 到 16 位有效数字。在计算机科学中,double 是一种常用的数据类型,因为它的计算速度比较快,但精度不够高。BigDecimal :高精度计算
  例如财务计算、货币计算等。BigDecimal 使用任意精度的整数来表示一个浮点数,因此可以表示任意位数的小数。BigDecimal 的精度可以通过设置参数来指定,因此可以避免 double 的精度误差问题。在 Java 中,BigDecimal 的计算速度通常比 double 慢,但可以保证精度和准确性。
  需要注意的是,在使用 BigDecimal 进行计算时,必须使用 String 类型的参数来初始化 BigDecimal 对象,否则可能会出现精度误差。另外,由于 BigDecimal 是一种高精度计算的数据类型,因此在处理大量数据时,可能会消耗大量的内存和计算资源。五:总结
  使用 BigDecimal 进行运算的速度比使用 double 慢得多,因为 BigDecimal 需要进行更多的计算。因此,在需要高精度计算的情况下,应该使用 BigDecimal,而在需要高效计算的情况下,应该使用 double。

283233,篮网国王官宣4换3地震交易,大换血助三巨头起死回生北京时间2月9日,步行者和国王官方宣布,双方正式达成交易。根据此前的报道,步行者将多曼塔斯萨博尼斯杰里米兰姆贾斯廷霍勒迪和1个2027年次轮签交易至国王,得到巴迪希尔德泰雷斯哈利伯山东名宿1天内2次犯事被捕,职业生涯被禁赛,黑历史劣迹斑斑CBA在用引入外援的方式,来为球队增强实力,只不过有些外援的作风就显得很不职业。曾经的NBA球星劳森就来过CBA,加盟山东男篮,但是在近日,劳森在西班牙马德里被捕,自此,他的各种职腾讯应届生怒怼领导事件醒醒吧!你的价值并不等同于你的忙碌本文转自技术领导力前几天,一位腾讯应届生在公司大群里怒怼领导过度加班,该聊天截图在网络上疯传,网友们纷纷为这位应届生敢作敢为的勇气点赞。该事业群的高管也连夜作出回应,承认高强度工作恭喜詹姆斯,恭喜篮网!步行者4换3交易完成后,65中锋将被买断北京时间二月10日,NBA常规赛正在进行,其中加兰德表示,看过斯蒂芬库里达米恩利拉德与凯里欧文的比赛,想要让自己变得更好,西蒙斯目前在费城独自训练,他的状态非常好。就在刚刚,恭喜勒重罚114号裁判!许钟豪一肘撞断2根骨头不吹罚,CBA裁判为谁服务在CBA昨晚的二阶段收官战当中,是出现了非常让人痛心的一件事。在广厦队和北控的比赛当中,北控核心后卫廖三宁是遭遇了严重伤病,赛后目前已经诊断为脸部颧骨骨折,并且伤情非常紧急,需要进湖人近9战6败胜率跌破50,3位老将截止日前或遭交易北京时间1月28日,NBA湖人队客场挑战76人队,勒布朗詹姆斯缺阵,拉塞尔威斯布鲁克安东尼戴维斯双超巨带队,可首节他们在进攻端就被76人队给打爆了,第一节76人队命中率比湖人高出1中国足球该走什么路?看了近四十年的足球,有很多话想说,但又不知道怎么说,感觉真的对中国足球死心了昨天的比赛我是没有看,其实也是不敢看,我不想破坏自己的心情我现在是一个上海球迷(60海港40申花),看的走近北京冬奥会中煤水文局参与北京冬奥会场地建设纪实特约记者陈雁通讯员刘鹤张浩开栏语翘首以盼的北京冬奥会开幕已进入倒计时。很多地勘单位在若干年前就已开始为呈现精彩北京冬奥会辛勤耕耘默默奉献,中煤水三无演员赵丽颖,走到今天这一步是应该的我们都知道现在的赵丽颖是85后里综合实力排名靠前的小花,也是一线艺人的咖位。现在的她强大了很多。不过这是她应该取得的成绩,因为这一切都是她靠自己打拼换来的。不是所有人都能像赵丽颖那正式宣布离婚!黄晓明妈妈被问儿媳妇是什么样的人,出乎意料1月28号,黄晓明和Angelababy正式宣布离婚了,两个人一起发布了感恩过去所有,未来仍是家人!结束了多年的婚姻生活,宣布离婚。据悉,目前两人已经办理完了离婚的相关手续,儿子小娇娇发视频再次控诉赵本山,听到内容我想说姑娘,别作了01。hr最近片面的新闻,我都看到了!细节的东西,我想通过直播的方式跟大家聊一聊。从默默无闻到小有名气,再到今天的反目成仇,中间到底是因为什么,想必大家都知道,这不是剧本!这是我亲
新疆5日游多少钱价格费用新疆5日游线路价格多少钱推荐去新疆旅行,一般有三种选择自由行,跟团游,和包车定制游跟团游不必多说,虽然省心但行程固定,看起来很实惠但许多只包含景区第一道门票,到最后花销其实也不少。自由行不受时间限制,可以根据全球销量超100万这辆车有怎样的魅力自驾出游对于不同的人来说会有不同的喜好,有些人喜欢享受轻松旅途,有些人享受不停驰骋在途中,感受每一次加速每一个弯道后不同的风景,对于喜欢享受驰骋在途中的人来说,一辆拥有操控乐趣的车平凡的世界改变很多人的命运,这世间的孙少平多得像天上星星第二次来吴堡县,上次来时,北风在酒店对面的黄河上呼啸盘旋,河被冻成青白色的冰,上边还有圆形冰凌,朋友说就快要发凌汛了,过几天得炮击破冰。傍晚和接待的领导在古镇谈论如何提升吸引游客,出国游那些过海关的经历和记忆,国家不同,世界差异太大了疫情三年了,旅行成了奢望,而出国游更是遥遥无期的一种回味。闲在家里回想前些年的出国旅行,大大小小也走过十几个国家,而印象最深的却是各国海关的不同,在进关与出关时,会遇到一些问题,有凌晨五点!万象市民众蹲守领事厅门口,抢着办护照出国2022年5月25日,据老挝媒体报道,有网友爆料称,自己为了办护照,早上5点起来排队。今天来办理出境证件的人依旧很多,因为办理护照有人数限制。5月24日,老挝人民凌晨3点开始排队办新疆是个好地方那拉提草原都说新疆是个好地方,耳听目染渐渐被感动,那片广漠而神秘的土地,让我充满了亲近她的期盼。坐上飞机,迎着西边耀眼的太阳,我如同夸父追日,追着阳光的脚步,想抓住,哪怕是一点影子,好让我追40万内买人生第一台车,传统新能源新势力还是特斯拉?关注汽车市场的朋友应该会发现,买燃油车的时候,你可以把购车预算细化到以万为单位,比如,预算35万,就能找到很多35万左右的车给你选择。但买新能源车,预算就很难细化到这么具体,因为目42部纪录片,看遍祖国敦煌西藏新疆云南的大好河山因为疫情隔离已经快80天了,每天最大的愿望就是走出小区,走出上海,去外面的世界走走。在不能出行的日子里,就只能用纪录片来安慰自己。以下42部纪录片,有一些是以前几年看的,有的是最近CBA选秀抽签大爆冷!新疆成最幸运球队6概率斩获探花签北京时间5月24日,2022年CBA乐透区选秀抽签结果出炉,同曦斩获状元签,江苏队获得榜眼签,而最为幸运的莫过于新疆队,以6的的状元概率抽到了第三顺位探花签。新疆队这算是爆了CBACBA抽签同曦斩获状元签江苏摘得榜眼签新疆抽到探花签直播吧5月24日讯2022年CBA选秀乐透抽签仪式采取线上的形式举行,最终同曦抽到状元签,江苏和新疆分获榜眼和探花签。其他球队顺位宁波第4福建第5四川第6青岛第7北控第8。CBA联850人被封在世界最大乳品工厂的70天图片来源视觉中国钛媒体注本文来源于微信公众号中国企业家杂志(IDiceocomcn),作者刘炜祺,编辑米娜,钛媒体经授权发布。如果有一个巨大的罩子,光明乳业华东中心工厂厂长谢朋军一