成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

Java踩坑記錄之BigDecimal類

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

前言

在java.math包中提供了對大數字的操作類,用于進行高精確計算,如BigInteger,BigDecimal類。而平常我們開發(fā)中使用最多的float和double只能適用于一般的科學和工程計算,如果要在比較精確的計算方面如貨幣,那么使用float和double會相應的丟失精度,因此用于精密計算大數字的類BigDecimal就必不可少了。所以BigDecimal適合商業(yè)計算場景,用來對超過16位有效位的數進行精確的運算。但是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,否則有可能出現精度問題。

《Effective Java》這本書里說過:

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

因為float和double執(zhí)行的是二進制浮點運算,二進制有些情況下不能準確的表示一個小數,就像十進制不能準確的表示1/3(1/3=0.3333...)也就是說二進制表示小數的時候只能夠表示能夠用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)

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

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

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

三. 不要使用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值有小數情況,最好用compareTo!

總結

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

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91久久精品一区二区三| 白白色 亚洲乱淫| www.亚洲在线| 欧美乱妇15p| 久久激情综合网| 色天使色偷偷av一区二区| 亚洲愉拍自拍另类高清精品| 91视视频在线观看入口直接观看www | 欧美日本一区| 久久久久久电影| 99久久免费国产| 久久久精品欧美丰满| av一区二区久久| 久久免费的精品国产v∧| 成人国产精品免费网站| 日韩欧美中文字幕一区| 国产精品99久| 欧美一个色资源| 成人午夜私人影院| 2021中文字幕一区亚洲| 99re亚洲国产精品| 欧美国产欧美综合| 亚洲国产精选| 亚洲国产一区二区三区 | 国产成人av自拍| 69久久99精品久久久久婷婷| 国产一区 二区| 日韩欧美精品在线| 91原创在线视频| 亚洲国产精品传媒在线观看| 黑人巨大精品欧美一区二区小视频| 综合中文字幕亚洲| 性感少妇一区| 久久精品国产亚洲高清剧情介绍| 欧美日韩精品免费观看视频| 国产美女视频一区| 日韩欧美电影一二三| www.色精品| 精品噜噜噜噜久久久久久久久试看 | 日韩午夜av一区| 丰满放荡岳乱妇91ww| 欧美激情一区二区| 亚洲黑丝在线| 天堂蜜桃一区二区三区| 欧美视频一区二区三区四区| 成人一级片在线观看| 国产视频视频一区| 欧美日韩亚洲国产精品| 一区二区三区高清不卡| 久久青草久久| 韩国av一区二区三区| 免费久久精品视频| 精品噜噜噜噜久久久久久久久试看| 99久久777色| 亚洲人成网站影音先锋播放| 色综合久久天天| 成人激情动漫在线观看| 中文字幕欧美一| 一本久久精品一区二区 | 尤物精品在线| 午夜精品成人在线| 91麻豆精品国产无毒不卡在线观看| av在线不卡网| 亚洲嫩草精品久久| 91黄色激情网站| 国产成人精品网址| 中文字幕一区二区三区蜜月| 久久精品国语| 成人午夜免费电影| 亚洲乱码国产乱码精品精小说| 色婷婷综合在线| yourporn久久国产精品| 亚洲一区二区三区在线| 欧美日韩成人在线一区| 欧美一区在线看| 天天综合网 天天综合色| 日韩亚洲欧美中文三级| 极品中文字幕一区| 精品中文av资源站在线观看| 久久精品日韩一区二区三区| 新67194成人永久网站| 高清国产一区二区| 一区二区三区免费网站| 欧美一卡2卡3卡4卡| 亚洲视频www| 欧美偷拍一区二区| 红杏aⅴ成人免费视频| 久久精品999| 中文字幕亚洲一区二区va在线| 欧美日韩一卡二卡三卡 | 欧美日韩视频在线观看一区二区三区 | 欧美激情一级片一区二区| 性做久久久久久久久| 日韩精品一区二区三区四区视频 | 欧美日韩亚洲免费| 精品一区二区免费在线观看| 中文字幕成人网| 在线一区二区视频| 国产精品xnxxcom| 国模娜娜一区二区三区| 亚洲精品国产无天堂网2021| 欧美一区二区三区小说| 一区二区三区四区五区精品视频 | 久久久久久亚洲综合| 久久午夜影视| 99久久伊人网影院| 日本三级亚洲精品| 亚洲欧美综合色| 欧美一级日韩免费不卡| 国产精品日本欧美一区二区三区| 成人少妇影院yyyy| 日韩福利视频网| 国产精品国产自产拍在线| 欧美日韩国产一级| 99在线热播精品免费99热| 成人av资源站| 日本不卡中文字幕| 中文字幕制服丝袜一区二区三区 | 这里只有精品视频在线观看| 亚洲黄色av| 99久久久国产精品| 久久国产夜色精品鲁鲁99| 亚洲精品视频在线观看网站| 欧美年轻男男videosbes| 亚洲免费高清| 欧美一区网站| 国产一区不卡视频| 亚洲综合在线第一页| 国产三级欧美三级日产三级99 | 国内精品久久久久久久影视麻豆| 国产原创一区二区| 亚洲综合一二区| 中文一区一区三区高中清不卡| 91精品国产综合久久精品性色| 免费日韩一区二区| 在线播放一区| 欧美高清视频一区| 国产91精品露脸国语对白| 三级不卡在线观看| 悠悠色在线精品| 国产欧美精品区一区二区三区| 欧美一卡二卡在线| 欧美日韩一区在线观看| 午夜亚洲一区| 一本色道久久精品| 国产精品magnet| 成人av在线资源网| 国产乱码精品1区2区3区| 美女www一区二区| 日韩激情视频网站| 亚洲国产成人tv| 亚洲女子a中天字幕| 国产精品久久久久久久久图文区| 久久久激情视频| 精品播放一区二区| 欧美大白屁股肥臀xxxxxx| 欧美日本韩国一区二区三区视频| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品欧美一区二区三区| 精品国内片67194| 日韩欧美视频在线| 欧美成人a在线| 久久午夜电影网| 精品国产乱码久久久久久浪潮| 日韩三级精品电影久久久 | 久久久久99精品一区| 欧美成人vps| 欧美一级一区二区| 欧美一区二区三区系列电影| 欧美二区乱c少妇| 911精品国产一区二区在线| 欧美日韩高清在线播放| 欧美色大人视频| 在线成人午夜影院| 日韩欧美国产一区二区在线播放| 日韩午夜在线影院| 欧美成人福利视频| 久久精品人人做人人综合| 欧美国产一区二区在线观看| 中文字幕国产一区| 亚洲欧洲日韩在线| 亚洲精品精品亚洲| 亚洲一区二区不卡免费| 亚洲第一在线综合网站| 日韩中文字幕麻豆| 久久精品国产99久久6| 狠狠色狠狠色合久久伊人| 国产精品18久久久久久vr| 国产不卡视频一区二区三区| 成人美女在线观看| 91视视频在线直接观看在线看网页在线看| 99re这里只有精品首页| 女女同性精品视频| 国内自拍亚洲| 亚洲一区网站| 欧美性受xxxx黑人xyx性爽| 91精品国产91综合久久蜜臀| 久久综合一区二区| 国产精品天美传媒| 亚洲国产视频一区|