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

您的位置:首頁技術文章
文章詳情頁

Java踩坑記錄之BigDecimal類

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

前言

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

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

先來看下面代碼的運行結果:

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);

輸出結果:

bd1=0.1000000000000000055511151231257827021181583404541015625bd2=0.1bd3=0.1

如果是float或double類型轉Bigdecimal,不要使用new BigDecimal()轉, 使用valueOf()方法 或 new BigDecimal('')轉成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í)行下這兩行代碼,看下輸出結果就知道為什么二進制不能表示0.1卻可以表示0.5了。所以其實不是BigDecimal的問題,BigDecimal就是為了滿足精確運算存在的,問題出在0.1它本身就一個不準確的值,這其實跟BigDecimal無關,但在使用的時候需要注意用法。

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

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

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

輸出結果:

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)

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

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

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

三. 不要使用BigDecimal的equals方法比較大小, 否則可能會因為精度問題導致比較結果和預期的不一致

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

輸出結果:

equals:falsecompareTo:true

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

總結

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91日韩在线| 亚洲综合中文| 亚洲网址在线观看| 福利一区和二区| 国产亚洲精品美女久久久久久久久久| 久久久久久久久99精品大| 国产精品xxx在线观看| 日韩精品电影一区亚洲| 先锋亚洲精品| 91成人超碰| 在线国产一区二区| 亚洲高清二区| 国产精品高颜值在线观看| 卡一卡二国产精品| 国产精品亲子伦av一区二区三区| 夜夜嗨一区二区三区| 久久久水蜜桃av免费网站| 天堂а√在线最新版中文在线| 日韩一区二区三区高清在线观看| 精品视频免费| 国产一区精品福利| 麻豆精品99| 国产一区二区三区免费在线| 国产中文欧美日韩在线| 国产一区二区三区久久久久久久久| 老司机免费视频一区二区| 日本精品影院| 亚洲精品动态| 日韩av在线中文字幕| 99国产成+人+综合+亚洲欧美| 日韩精品一区二区三区中文字幕| 精品国产精品久久一区免费式| 蜜桃tv一区二区三区| 亚洲一区免费| 国产一区精品福利| 亚洲v天堂v手机在线| 色婷婷色综合| 日韩欧美三区| 亚洲午夜91| 久久国内精品视频| 国产高清一区| 久久精品国产一区二区| 蜜臀av一区二区在线免费观看 | 国产亚洲高清一区| 亚洲先锋成人| 亚洲精华国产欧美| 国产精品久久乐| 免费精品国产| 美腿丝袜在线亚洲一区| 99视频一区| 精品精品99| 日韩一区中文| 亚洲精品小说| 蜜臀国产一区| 国产毛片精品| 视频一区二区三区中文字幕| 精品久久97| 日本久久一区| 欧美69视频| 超碰成人av| 国产亚洲人成a在线v网站| 国产亚洲毛片| 99视频精品全部免费在线视频| 国产精品极品国产中出| 亚洲综合婷婷| 婷婷色综合网| 黄色在线观看www| 你懂的亚洲视频| 欧美在线不卡| 午夜精品成人av| 久久精品三级| 国产情侣久久| 日韩一区精品| 中文字幕av一区二区三区人| 久久婷婷丁香| 国产suv精品一区二区四区视频| 欧美亚洲二区| 日本不卡高清视频| 日本中文字幕不卡| 日韩综合一区二区| 亚洲欧美久久精品| 一本一道久久a久久| 欧美a级片一区| 神马午夜久久| 久久精选视频| 人人精品亚洲| 亲子伦视频一区二区三区| 日产午夜精品一线二线三线| 国产精品最新自拍| 欧美日韩夜夜| 综合国产视频| 日韩精品一二三| 亚洲丝袜美腿一区| 亚洲人成亚洲精品| 中文一区一区三区免费在线观 | 精品一区二区三区中文字幕| 国产欧美日韩精品一区二区免费| 中文视频一区| 日本午夜精品视频在线观看| 亚洲精品福利| 欧美日韩 国产精品| 日本视频在线一区| 欧美激情精品| 日韩成人三级| 999久久久国产精品| 国产另类在线| 国产欧美日本| 久久激情av| 欧美激情99| 日韩欧美一区免费| 欧美日中文字幕| 丝袜亚洲精品中文字幕一区| 亚洲精品伊人| 国产极品模特精品一二| 国产成人77亚洲精品www| 国产高清不卡| 免费视频亚洲| 中文字幕免费一区二区| 日韩欧乱色一区二区三区在线| 石原莉奈在线亚洲二区| 亚洲精品免费观看| 国产精品成人国产| 亚洲性色av| 久久亚洲图片| 国产精品任我爽爆在线播放| 国产一区不卡| 国产精品97| 日韩在线网址| 国精品产品一区| 一区在线免费观看| 国产欧美日韩视频在线| 在线精品亚洲欧美日韩国产| 91久久亚洲| 麻豆一区在线| 国产精品中文字幕制服诱惑| 国内在线观看一区二区三区| 99精品电影| 日本成人中文字幕在线视频| 麻豆精品99| 欧美日韩国产综合网| 日韩在线电影| 日韩不卡视频在线观看| 蜜桃视频在线观看一区| 国产不卡精品| 亚洲综合专区| 日韩大片在线播放| 欧美亚洲网站| 欧美日中文字幕| 国产精品美女午夜爽爽| 欧美日韩视频免费观看| 亚洲精品乱码| 日韩av一级| 国产精品免费99久久久| 亚洲欧美伊人| 精品国内亚洲2022精品成人| 红桃视频亚洲| 中文在线免费视频| 欧美有码在线| 国产精品婷婷| 国产成人精品亚洲日本在线观看| 欧美一级二级三级视频| 欧美一区二区三区激情视频| 国产精品v日韩精品v欧美精品网站 | 亚洲一区二区免费看| 美女视频免费精品| 亚洲精品影视| 香蕉国产精品| 日产精品一区| 成人午夜在线| 国产精品一区二区三区美女| 国产精品色网| 日韩中文字幕亚洲一区二区va在线| 日韩国产一区二区| 日韩av不卡在线观看| 国产福利电影在线播放| 亚洲一区二区免费在线观看| av在线最新| 久久99蜜桃| 欧美天堂一区二区| 亚洲v天堂v手机在线| 午夜精品婷婷| 亚洲播播91| 荡女精品导航| 久久的色偷偷| 国产精区一区二区| 日韩国产欧美在线播放| 国产精品女主播一区二区三区| 欧美羞羞视频| 超碰在线99| 麻豆传媒一区二区三区| 日韩精品午夜视频| 亚洲欧洲国产精品一区| 在线亚洲成人| 日韩一级网站| 精品中文一区| 丝袜av一区| 日韩欧美视频专区| 蜜桃成人精品| 成人免费电影网址| 日韩和的一区二在线|