纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

源码分析double和BigDecimal区别

9月21日 夜未央投稿
  一:double分析
  double类型的底层实现是使用IEEE754标准来表示浮点数。在Java中,double类型的变量占用8个字节,其中1个字节用于表示符号位,11个字节用于表示指数,剩余的52个字节用于表示尾数。由于尾数只有52个字节,因此double类型能够精确表示的数字是有限的。在Java中,double类型的值可以用以下公式来计算:value(1)sm2e
  其中,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(BigDecimalaugend):将该BigDecimal与指定的BigDecimal相加。BigDecimalbd1newBigDecimal(10。5);BigDecimalbd2newBigDecimal(20。3);BigDecimalresultbd1。add(bd2);System。out。println(result);输出30。8subtract(BigDecimalsubtrahend):将该BigDecimal减去指定的BigDecimal。BigDecimalbd1newBigDecimal(10。5);BigDecimalbd2newBigDecimal(20。3);BigDecimalresultbd2。subtract(bd1);System。out。println(result);输出9。8multiply(BigDecimalmultiplicand):将该BigDecimal与指定的BigDecimal相乘BigDecimalbd1newBigDecimal(10。5);BigDecimalbd2newBigDecimal(20。3);BigDecimalresultbd1。multiply(bd2);System。out。println(result);输出213。15pide(BigDecimalpisor,intscale,RoundingModeroundingMode):将该BigDecimal除以指定的BigDecimal,并指定小数点后保留的位数和舍入模式。BigDecimalbd1newBigDecimal(10。5);BigDecimalbd2newBigDecimal(20。3);BigDecimalresultbd2。pide(bd1,2,RoundingMode。HALFUP);System。out。println(result);输出1。93setScale(intnewScale,RoundingModeroundingMode):设置小数点后保留的位数和舍入模式。BigDecimalbd1newBigDecimal(10。555);BigDecimalresultbd1。setScale(2,RoundingMode。HALFUP);System。out。println(result);输出10。56intValue():将该BigDecimal转换为int类型。BigDecimalbd1newBigDecimal(10。5);intresultbd1。intValue();System。out。println(result);输出10doubleValue():将该BigDecimal转换为double类型。BigDecimalbd1newBigDecimal(10。5);doubleresultbd1。doubleValue();System。out。println(result);输出10。5toString():将该BigDecimal转换为String类型。BigDecimalbd1newBigDecimal(10。5);Stringresultbd1。toString();System。out。println(result);输出10。5
  需要注意的是,在使用BigDecimal进行计算时,应该使用BigDecimal的方法进行计算,而不是使用double进行计算后再转换成BigDecimal。因为这样可能会导致精度问题。例如:doublea0。1;doubleb0。2;BigDecimalxnewBigDecimal(a);将double转换成BigDecimalBigDecimalynewBigDecimal(b);将double转换成BigDecimalBigDecimalzx。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。7976931348623157x10308,精度为15到16位有效数字。在计算机科学中,double是一种常用的数据类型,因为它的计算速度比较快,但精度不够高。BigDecimal:高精度计算
  例如财务计算、货币计算等。BigDecimal使用任意精度的整数来表示一个浮点数,因此可以表示任意位数的小数。BigDecimal的精度可以通过设置参数来指定,因此可以避免double的精度误差问题。在Java中,BigDecimal的计算速度通常比double慢,但可以保证精度和准确性。
  需要注意的是,在使用BigDecimal进行计算时,必须使用String类型的参数来初始化BigDecimal对象,否则可能会出现精度误差。另外,由于BigDecimal是一种高精度计算的数据类型,因此在处理大量数据时,可能会消耗大量的内存和计算资源。五:总结
  使用BigDecimal进行运算的速度比使用double慢得多,因为BigDecimal需要进行更多的计算。因此,在需要高精度计算的情况下,应该使用BigDecimal,而在需要高效计算的情况下,应该使用double。
投诉 评论

蜘蛛雨后春笋般的蜘蛛网令人感动。人应该不懈奋斗,蜘蛛织网而人类生产,不也是很类似吗?放大可见蜘蛛织网,很清新,密密麻麻的丝状物织了一个收飞虫的网。雨后雾蒙蒙的,挡不住蜘……五月的诗情,由槐花做引这个五一假期哪都没有去,只在家门口的公园逛了两圈,本来都不想出去呢采槐花因为假期人会很多,从不会在这个时候出门,现在疫情又很严重,所以更不会选择这时候出门!而这次出……小米13Ultra再次发力外观配置都提升了,看完我酸了声明:原创不易,禁止搬运,违者必究!小米从注重性价比,到如今已经在冲击高端市场了。小米的数字系列机型,MIX系列机型以及Ultra机型,在配置上是越来越出色。小米Ultr……可是,你真的喜欢冬天吗?(本文转自公众号:银松社。引言,结尾:银锈;正文作者:青NE。转载时部分重新编辑)引文:近闻家乡各地都飘下了雪这似乎预示着另一个季节的轮回冬天,是东北的……源码分析double和BigDecimal区别一:double分析double类型的底层实现是使用IEEE754标准来表示浮点数。在Java中,double类型的变量占用8个字节,其中1个字节用于表示符号位,11个字……央媒的呼吁起作用了,第二个华为公布数据,苹果始料未及自从华为手机业务被老美限制后,近两年的国内高端手机市场就只能用一地鸡毛来形容。据公开资料显示,2021年苹果的份额占比和营收利润高达70以上,比国内手机厂商加起来的两倍还多。……那张灵魂小桌子,折射出自驾旅游时代生活的丰盈自驾游这么些年,每到一地,打算烧饭或者住下来,第一件事,就是摆桌子。最近,由于疫情,出行不了,有时间整理旅游用品,忽然发现,桌子,很重要。这点,以前一直没有注意过。说明一……旅行志之漫谈旅游这件事情何谓旅游?!现代汉语大词典是这样来解释的,说道:旅行与游览。我是这样来理解并去认为旅游这件事情的,旅游只是一种手段罢了,游览才是它真正的目的。旅游既可以增长你和我的知识、开阔你……日本乒乓球天才少年张本智和背叛中国的原因?他被中国培养成乒乓球神童,但却背叛中国加入日本国籍,而且不断挑衅,扬言要打败所有中国选手。替日本拿到世界冠军,只要他在赛场上赢得一分,就会像狗一样乱吼乱叫,其狂妄自大的样子好像……秋意渐浓,去柘林寻找独属这个季节的乡间味道秋风乍起,秋意渐浓,柘林的一草一木,一蔬一果,披了上油画般的色彩。在淡淡的桂花飘香中,各类乡间美食映季登场,每一种都让人垂涎欲滴。今天,就跟着小编一同去看看吧!第一道美味……十年磨一剑!华为Mate50系列重返月球,Mate系列再创巅12月21日,华为终端上线了一支《重返月球的Mate》宇航员大片,以一种脑洞大开的创意向我们展示了华为Mate50系列的强大功能。值得一提的是,早在2018年,华为也曾针对Ma……官宣!4月22日开幕!3月9日上午,常州市第十六届运动会新闻发布会召开,发布会公布了市运会的举办时间、项目设置、参赛办法、表彰办法等基本情况。第十六届市运会会徽、吉祥物也正式发布。本届市运会由……
新能源车市占率持续走高自主合资争相布局来源:中国经济网姜智文今年以来,国内新能源汽车迎来全面爆发,助力汽车市场整体实现正增长。数据显示,19月,新能源汽车产销分别完成471。7万辆和456。7万辆,同比分别增……古代女人来月经用什么?怎么办?如何处理?远古时代的女孩儿们,要有随地取材的绝技才能过活。穴居时代的女性,有时直接用海里的海绵,有时用草之类的东西作成卫生棉使用。古埃及人用软化过的纸草叶子作卫生……古代四美有缺陷!杨贵妃有狐臭?说到公认的美人,你提名范冰冰、高圆圆等女星,可能有人不认同。但报上西施、貂蝉、王昭君、杨玉环这四位美人的名字,宝姐相信没人不服气,毕竟她们可是享有沉鱼落雁、闭月羞花……中国古代四大发明揭开四大发明的意义和历史地位中国古代四大发明:揭开四大发明的意义和历史地位四大发明是指中国古代对世界具有很大影响的四种发明。中国古代的时候文明高度发达,出现了许许多多的发明,其中的四大发明更加是闻名……首尔现野猪群市区频繁野猪出没现象具体详情曝光首尔现野猪群最新消息:首尔市今年(2018)野猪出没现象截止到9月底一共发生362起,相对于去年同期提高10。8。野猪出现在首尔市区的现象从201……闺蜜求写借条安慰结局是反被追债具体详情经过曝光一女孩遇到这样一个好闺蜜,眼下她正被对方拿着这些借条追债。据悉,闺蜜心情不好求安慰,说给她写个借条就好了,于是,她就反复写了四次借条(其中有借条作废)来……三胎政策开放,白岩松想要让更多的人生孩子,3个问题得先解决在这个年代,养娃容易育娃难。一个家庭在给予孩子教育方面的投资付出极大。对于普通家庭而言,养育一个孩子已是巨大的压力,更别说是两、三个孩子。在这两年,我国生育率都极低,为此,国家……巧妇无米,林德洛夫踢后腰!腾哈赫感叹我们本赛季一直在妥协曼联顺利进入联赛决赛,这是曼联过去4年来第二次进入杯赛的决赛。腾哈赫在赛后虽然放话说进入决赛就是为了冠军,但是也表达了自己的担忧:想要冠军,总要有合适的球员才行。腾哈赫的……iLab世界地球日行动来吧!珊瑚卫士!38亿年前,生命起源于海洋。地球表面71是海洋珊瑚是14海洋生物的栖息地世界上超过5亿人的生活依赖珊瑚礁资源,过去30年大堡礁50的珊瑚白化未来30年全球60的珊瑚面临严重威胁……i312100F相当于几代i5?i312100F和i5104intel第12代酷睿新型号陆续上架,相信大家更关心的12代型号就是i512400F和i312100F这两款CPU,从售价上来看,i312100F和历代i510400F价格很相……倒车入库图解详细说明倒车入库100成功(技巧图详解)倒车入库图解详细说明:倒车入库100成功那么,如何才能顺利通过倒车入库呢?2018倒车入库技巧图解,不想过关都难!科目二考试中难点很多,其中倒车入库是最大的难点。不……世界上最后一只凤凰(有人拍到了龙和凤凰)大千世界无奇不有啊,这部有人拍到一只凤凰,据说还是世界上最后一只凤凰了,之前有一男子抓到一只龙、世界上最后一只麒麟、世界上有人拍到麒麟、有人拍到真实的九尾狐等等,不过这些大都是……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形