日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java踩坑記錄之BigDecimal類

瀏覽:106日期:2022-08-21 13:50:48

前言

在java.math包中提供了對大數(shù)字的操作類,用于進行高精確計算,如BigInteger,BigDecimal類。而平常我們開發(fā)中使用最多的float和double只能適用于一般的科學(xué)和工程計算,如果要在比較精確的計算方面如貨幣,那么使用float和double會相應(yīng)的丟失精度,因此用于精密計算大數(shù)字的類BigDecimal就必不可少了。所以BigDecimal適合商業(yè)計算場景,用來對超過16位有效位的數(shù)進行精確的運算。但是BigDecimal的使用并不像float和double那樣,使用不當造成的后果更嚴重,下面就來看下我們項目中踩過BigDecimal的坑:

一. BigDecimal的初始化精度丟失問題

先來看下面代碼的運行結(jié)果:

BigDecimal bd1 = new BigDecimal(0.1);System.out.println('bd1='+bd1);BigDecimal bd2 = new BigDecimal('0.1');System.out.println('bd2='+bd2);BigDecimal bd3 = BigDecimal.valueOf(0.1);System.out.println('bd3='+bd3);

輸出結(jié)果:

bd1=0.1000000000000000055511151231257827021181583404541015625bd2=0.1bd3=0.1

如果是float或double類型轉(zhuǎn)Bigdecimal,不要使用new BigDecimal()轉(zhuǎn), 使用valueOf()方法 或 new BigDecimal('')轉(zhuǎn)成string,否則有可能出現(xiàn)精度問題。

《Effective Java》這本書里說過:

如果需要精確的答案,請避免使用float和double

因為float和double執(zhí)行的是二進制浮點運算,二進制有些情況下不能準確的表示一個小數(shù),就像十進制不能準確的表示1/3(1/3=0.3333...)也就是說二進制表示小數(shù)的時候只能夠表示能夠用1/(2^n)的和的任意組合,例如:

0.5能夠表示,因為它可以表示成為1/2

0.75也能夠表示,因為它可以表示成為1/2+1/(2^2)

0.875也能夠表示,因為它可以表示成為1/2+1/(2^2)+1/(2^3)

但是0.1不能夠精確表示,因為它不能夠表示成為1/(2^n)的和的形式

System.out.println(0.5*3);System.out.println(0.1*3);

大家可以本地執(zhí)行下這兩行代碼,看下輸出結(jié)果就知道為什么二進制不能表示0.1卻可以表示0.5了。所以其實不是BigDecimal的問題,BigDecimal就是為了滿足精確運算存在的,問題出在0.1它本身就一個不準確的值,這其實跟BigDecimal無關(guān),但在使用的時候需要注意用法。

二. BigDecimal在進行除法運算時需設(shè)置精度,否則對于除不盡的情況會拋出異常

繼續(xù)看下面的代碼執(zhí)行結(jié)果:

BigDecimal bd4 = new BigDecimal('10');BigDecimal bd5 = new BigDecimal('3');System.out.println(bd4.divide(bd5));

輸出結(jié)果:

Exception in thread 'main' java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.at java.math.BigDecimal.divide(BigDecimal.java:1690)at BigDecimalTest.main(BigDecimalTest.java:38)

應(yīng)該向下面這樣設(shè)置小數(shù)點后的位數(shù),以及超出后是四舍五入和向上/向下取整或者直接舍棄:

System.out.println(bd4.divide(bd5,2,BigDecimal.ROUND_DOWN));

第二個參數(shù)表示小數(shù)位數(shù),第三個參數(shù)表示超出的位數(shù)直接舍棄(當然也可以設(shè)置四舍五入,向上取整等)

三. 不要使用BigDecimal的equals方法比較大小, 否則可能會因為精度問題導(dǎo)致比較結(jié)果和預(yù)期的不一致

BigDecimal bd1 = new BigDecimal('0');BigDecimal bd2 = new BigDecimal('0.0');System.out.println(bd1.equals(bd2));System.out.println(bd1.compareTo(bd2) == 0)

輸出結(jié)果:

equals:falsecompareTo:true

如果你無法確定你的BigDecimal值有小數(shù)情況,最好用compareTo!

總結(jié)

到此這篇關(guān)于Java踩坑記錄之BigDecimal類的文章就介紹到這了,更多相關(guān)Java踩坑BigDecimal類內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲香蕉网站| 你懂的国产精品永久在线| 国产精品2区| 美女视频黄久久| 亚洲精品乱码| 国产日产精品_国产精品毛片| 视频一区日韩精品| 日本成人精品| 欧美xxxx性| 久久电影tv| av亚洲在线观看| 在线精品观看| 免费日韩一区二区三区| 麻豆视频在线观看免费网站黄| 日韩欧美自拍| 亚洲激情av| 日韩av二区在线播放| 精品丝袜久久| 91精品精品| 欧美午夜精彩| 欧美日韩一区二区三区在线电影| 久久99视频| 免费视频亚洲| 青青国产精品| 亚洲天堂久久| 欧美精品中文字幕亚洲专区| 欧美1区2区3| 99国产精品久久久久久久成人热| 日韩欧美激情电影| 久久精品一区二区三区中文字幕| 国产精品久久久久久久免费观看| 亚洲神马久久| 精品欠久久久中文字幕加勒比| 欧美成人国产| 亚洲欧洲av| 波多视频一区| 日本va欧美va精品发布| 999国产精品视频| 欧美日本久久| 亚洲一区国产| 999久久久国产精品| 美女国产精品久久久| 亚洲色图综合| 九色精品91| 欧洲av不卡| 麻豆精品视频在线观看视频| 99国产一区| 天堂资源在线亚洲| 色一区二区三区四区| 亚洲精品伊人| 在线综合亚洲| 99久久www免费| av最新在线| 老鸭窝一区二区久久精品| 日本一不卡视频| 日韩专区欧美专区| 秋霞影院一区二区三区| 久久久久免费| 亚洲最新无码中文字幕久久 | 国产精品一区二区精品视频观看 | 日韩三区免费| 国产在线一区不卡| 里番精品3d一二三区| 欧美黄色一区二区| 黄色网一区二区| 亚洲黄色中文字幕| 久久精品导航| 欧美日韩国产传媒| 免费日韩av片| 欧美一区成人| 精品少妇一区| 激情婷婷久久| 免费黄网站欧美| 日本欧美大码aⅴ在线播放| 日韩黄色在线观看| 国产黄色一区| 国产成人免费av一区二区午夜| 精品久久久中文字幕| 99久久亚洲精品蜜臀| 亚洲一区黄色| 国产日韩欧美一区在线| 精品视频在线你懂得| 99精品在线| 久久精品 人人爱| 日韩国产欧美一区二区| 亚洲综合日韩| 国产福利一区二区精品秒拍 | 亚洲一级淫片| 精品视频一区二区三区在线观看 | 超碰在线99| 亚洲免费网址| 国产精品毛片久久久| 久久网站免费观看| 日韩精品免费视频一区二区三区 | 日韩av不卡在线观看| 国产在线一区不卡| 亚洲专区一区| 国产一区二区三区四区五区传媒| 午夜精品亚洲| 久久这里只有精品一区二区| 久久九九99| 麻豆精品久久久| 日韩精品一卡二卡三卡四卡无卡| 国产精品777777在线播放| 亚洲一区二区动漫| 国产a亚洲精品| 日韩三级久久| 欧美日韩国产精品一区二区亚洲| 日韩国产欧美在线播放| 午夜欧美视频| 中文字幕系列一区| 福利一区在线| 久久不见久久见免费视频7| 久久最新视频| 婷婷激情图片久久| 亚洲综合电影| 久久久久久一区二区| 国产福利资源一区| 国产日韩中文在线中文字幕| 免费在线观看一区二区三区| 91精品福利| 亚洲国产专区| 国产99久久| 久久久久99| 国产suv精品一区| 国产精品二区不卡| 99精品99| 中文字幕一区二区精品区| 国产精品久久久久av电视剧| 久久久亚洲欧洲日产| 久久国际精品| 国产不卡人人| 久久国产免费看| 亚洲精品极品少妇16p| 日产午夜精品一线二线三线| 日韩一区二区三免费高清在线观看| 国产婷婷精品| 日韩精品视频网站| 综合色一区二区| 91九色综合| 久久精品国产福利| 日韩在线精品| 国产亚洲精品久久久久婷婷瑜伽| 国产一级一区二区| 日韩高清一区二区| 久久精品亚洲| 在线日韩欧美| 国产日韩一区二区三区在线| 国产91在线播放精品| 国产一区二区中文| 天堂久久一区| 国产66精品| 在线视频精品| 深夜日韩欧美| 精品亚洲自拍| 9国产精品视频| 日本综合精品一区| 亚洲天堂免费电影| 日韩精品亚洲专区在线观看| 高清久久精品| 自拍自偷一区二区三区| 成人精品久久| 日韩av午夜在线观看| 久久精品影视| 日韩av网站在线观看| 精精国产xxxx视频在线播放| 少妇精品久久久一区二区 | 日本午夜大片a在线观看| 天堂俺去俺来也www久久婷婷| 成人福利av| 国产精品极品在线观看| 亚洲专区欧美专区| 天堂资源在线亚洲| 国产69精品久久| 国产欧美一区二区精品久久久| 亚洲激情婷婷| 免费观看亚洲| 精品久久在线| 国产欧美另类| 四虎精品永久免费| 亚洲一级在线| 宅男在线一区| 麻豆国产精品777777在线| 亚洲精品影视| 亚洲精品乱码日韩| 三级在线观看一区二区| 99日韩精品| 亚洲一区日韩在线| 好吊日精品视频| 婷婷成人基地| 亚洲欧洲一区二区天堂久久| 久久国产亚洲精品| 亚洲成av在线| 极品av在线| 久久蜜桃av| 免费一级片91| 亚洲精品欧美| 男人的天堂久久精品| 亚洲精品国产日韩| 88久久精品|