精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

踩坑日記:BigDecimal四大坑,真的會(huì)用BigDecimal?

開(kāi)發(fā) 前端
BigDecimal是Java編程語(yǔ)言中的一個(gè)類,屬于Java.math包,用于進(jìn)行高精度的十進(jìn)制數(shù)計(jì)算。它提供了對(duì)任意精度的十進(jìn)制數(shù)進(jìn)行精確計(jì)算的能力,適用于需要保持精度和執(zhí)行準(zhǔn)確計(jì)算的場(chǎng)景。

一、前言

最近在項(xiàng)目中使用BigDecimal存儲(chǔ)訂單的數(shù)量,數(shù)據(jù)庫(kù)保留三位小數(shù)。需求是數(shù)量變化了就會(huì)有其他操作,頭腦發(fā)熱順手寫(xiě)了個(gè)equals進(jìn)行判斷是不是相等!

后來(lái)怎么測(cè)都是不相等!百思不得其解,看了一下equals方法才知道!

BigDecimal值的比較官方推薦是compareTo的,如果數(shù)據(jù)庫(kù)沒(méi)有保留小數(shù),用equals是沒(méi)問(wèn)題,但是不建議,非常不建議!!

今天就總結(jié)一下BigDecimal使用時(shí)需要注意的點(diǎn)!

二、BigDecimal在理解

BigDecimal是Java編程語(yǔ)言中的一個(gè)類,屬于java.math包,用于進(jìn)行高精度的十進(jìn)制數(shù)計(jì)算。它提供了對(duì)任意精度的十進(jìn)制數(shù)進(jìn)行精確計(jì)算的能力,適用于需要保持精度和執(zhí)行準(zhǔn)確計(jì)算的場(chǎng)景。

與基本的浮點(diǎn)數(shù)類型(如float和double)不同,BigDecimal使用基于整數(shù)的表示方法,通過(guò)存儲(chǔ)和處理數(shù)值的每一位來(lái)避免精度丟失。這使得它可以表示極大或極小的數(shù)字,并執(zhí)行準(zhǔn)確的計(jì)算。

BigDecimal在金融領(lǐng)域、貨幣計(jì)算、稅務(wù)計(jì)算、精確計(jì)算需求以及其他需要保持精度和執(zhí)行準(zhǔn)確計(jì)算的場(chǎng)景中廣泛應(yīng)用。

「當(dāng)然要注意」:

BigDecimal對(duì)象是不可變的,這意味著一旦創(chuàng)建就不能修改其值。每個(gè)操作都會(huì)產(chǎn)生一個(gè)新的BigDecimal對(duì)象作為結(jié)果。

由于BigDecimal是一個(gè)對(duì)象,并且執(zhí)行計(jì)算時(shí)需要更多的內(nèi)存和處理時(shí)間,與使用原生數(shù)據(jù)類型相比,它可能會(huì)稍微降低性能。因此,在大量計(jì)算或?qū)π阅芤筝^高的情況下,需要權(quán)衡使用BigDecimal的優(yōu)勢(shì)和劣勢(shì)。

三、BigDecimal注意點(diǎn)

1、BigDecimal使用equals

這就是小編最近需要的,我們還是要提高自己的編碼規(guī)范哈,不要學(xué)小編,equals用習(xí)慣了,看見(jiàn)比較就用!

當(dāng)然也不用使用 == != 來(lái)比較哈!!

我們來(lái)個(gè)例子感受一下哈!

BigDecimal dbNum = new BigDecimal("2.000");

BigDecimal num = new BigDecimal("2");
 if (dbNum.equals(num)) {
     System.out.println("=========相等我就操作========");
 }else {
     System.out.println("=========不相等就忽略========");
 }

 BigDecimal dbNum1 = new BigDecimal("2");
 if (dbNum1.equals(num)) {
     System.out.println("=========相等我就操作========");
 }else {
     System.out.println("=========不相等就忽略========");
 }

我們從源碼來(lái)看一下這個(gè)equals內(nèi)部到底是怎么比較的:

我們看到BigDecimal里重寫(xiě)了equals方法!

前面簡(jiǎn)單的就不說(shuō)什么意思了,我們挑重點(diǎn)說(shuō)一下:

scale != xDec.scale:這是比較兩個(gè)數(shù)的精度長(zhǎng)度是否相等,長(zhǎng)度不一致直接返回false,這就是我們例子返回false的原因!

我們打斷點(diǎn)可以看到一個(gè)是3位精度,一個(gè)0位!

long s = this.intCompact; long xs = xDec.intCompact; :這倆放一起說(shuō):

表示 BigDecimal 對(duì)象的緊湊表示形式,這個(gè)又分為jdk8之前和之后

在 JDK 1.8 之前的版本中,BigDecimal 內(nèi)部使用一個(gè) int 數(shù)組來(lái)表示大整數(shù)。每個(gè)元素都代表了 BigDecimal 的一部分位數(shù)。這種表示方式需要額外的內(nèi)存空間,并且對(duì)于小數(shù)和較小的整數(shù)來(lái)說(shuō)是不必要的。

為了優(yōu)化性能和節(jié)省內(nèi)存,JDK 1.8 引入了 intCompact 屬性,它將 BigDecimal 內(nèi)部的表示形式轉(zhuǎn)換為一個(gè) long 值。這個(gè) long 值可以直接存儲(chǔ)整數(shù)值,而對(duì)于較大的數(shù)字,則使用溢出(overflow)和膨脹(inflation)機(jī)制進(jìn)行處理。

具體而言,當(dāng) BigDecimal 對(duì)象的值可以用 long 類型表示時(shí),intCompact 將存儲(chǔ)該長(zhǎng)整型值。如果值超過(guò) long 類型的范圍,則會(huì)使用其他方式進(jìn)行存儲(chǔ),例如使用 intVal 字段來(lái)存儲(chǔ) int 數(shù)組。

為了形象,我們把第二次比較的兩個(gè)數(shù)都變?yōu)椋?.0,經(jīng)過(guò)intCompact后,變?yōu)?0來(lái)進(jìn)行后續(xù)操作! 如果超過(guò)Long的最大值就會(huì):使用溢出(overflow)和膨脹(inflation)機(jī)制進(jìn)行處理,這里就不展開(kāi)看了,感興趣的可以模擬打斷點(diǎn)查看哈!

源碼:

@Override
public boolean equals(Object x) {
    if (!(x instanceof BigDecimal))
        return false;
    BigDecimal xDec = (BigDecimal) x;
    if (x == this)
        return true;
    if (scale != xDec.scale)
        return false;
    long s = this.intCompact;
    long xs = xDec.intCompact;
    if (s != INFLATED) {
        if (xs == INFLATED)
            xs = compactValFor(xDec.intVal);
        return xs == s;
    } else if (xs != INFLATED)
        return xs == compactValFor(this.intVal);

    return this.inflated().equals(xDec.inflated());
}

解決方案就是:使用compareTo,compareTo方法實(shí)現(xiàn)了Comparable接口,準(zhǔn)備的比較的兩者! 有興趣可以debug看看compareTo方法!這里就不給大家展示了!!

2、BigDecimal初始化

這個(gè)基本上大家都會(huì)注意,用字符串或整數(shù)初始化:為避免浮點(diǎn)數(shù)轉(zhuǎn)換引起的精度丟失,最好使用字符串或整數(shù)來(lái)初始化BigDecimal對(duì)象!double、float類型只能保留有限的有效數(shù)字,分別是15個(gè)左右7、8個(gè),我們寫(xiě)個(gè)例子就明白了!

我們寫(xiě)上IDEA都看不下去要提示你可以優(yōu)化,Alt+Enter讓IDEA來(lái)解決吧!!

BigDecimal bigDecimal2 = new BigDecimal("0.11");

BigDecimal bigDecimal = new BigDecimal(0.11);

System.out.println(bigDecimal);
System.out.println(bigDecimal2);

3、BigDecimal精度問(wèn)題

我們?cè)谑褂肂igDecimal 進(jìn)行計(jì)算的時(shí)候,一定要保留小數(shù),基本上所有的計(jì)算需求都會(huì)讓你保留幾位小數(shù)。沒(méi)有的話得到無(wú)限小數(shù)就會(huì)報(bào)錯(cuò)異常:ArithmeticException!

保留小數(shù)的規(guī)則這里就不展開(kāi)說(shuō)了,大家根據(jù)自己需要去看api就可以了!

BigDecimal bigDecimal2 = new BigDecimal("10");

BigDecimal bigDecimal = new BigDecimal("3");

System.out.println(bigDecimal2.divide(bigDecimal));

4、BigDecimal多余0

這個(gè)就是前面最開(kāi)始說(shuō)的,我們保留的位數(shù)很多,有的前端展示又不想看到!這時(shí)就要把多余的0去掉!

這其實(shí)不算坑了,這算是優(yōu)化顯示哈!

BigDecimal bigDecimal1 = new BigDecimal("199.100");
System.out.println(bigDecimal1);
System.out.println(bigDecimal1.stripTrailingZeros());

四、總結(jié)

我們來(lái)在總結(jié)有哪些注意事項(xiàng)哈:

  • BigDecimal比較大小的時(shí)候要使用compareTo();
  • BigDecimal用字符串或整數(shù)初始化;
  • BigDecimal計(jì)算時(shí)盡量指定保留精度位數(shù);
  • 按需去除多余0;
  • BigDecimal都是不可變的;

大家一定注意這些東西,特別是設(shè)計(jì)到錢的計(jì)算,一個(gè)不小心一個(gè)小目標(biāo)沒(méi)了!

責(zé)任編輯:姜華 來(lái)源: 小王博客基地
相關(guān)推薦

2024-05-30 12:15:04

2024-04-10 08:39:56

BigDecimal浮點(diǎn)數(shù)二進(jìn)制

2022-06-06 00:25:09

Golangpanic死鎖

2020-06-04 14:15:55

Java中BigDecimal函數(shù)

2022-07-19 07:30:06

BigDecimal運(yùn)算float

2025-11-13 08:22:03

2022-12-08 09:34:26

開(kāi)發(fā)操作

2022-12-23 08:37:16

BigDecimaljava

2018-07-06 05:05:07

2025-04-29 10:00:15

NVRIPC弱電

2018-04-02 07:32:15

2023-02-17 08:20:24

SQL腳本數(shù)據(jù)庫(kù)

2020-09-15 08:46:26

Kubernetes探針服務(wù)端

2023-01-18 23:20:25

編程開(kāi)發(fā)

2020-09-06 10:02:32

項(xiàng)目管理戰(zhàn)略目標(biāo)CIO

2021-09-03 11:15:18

場(chǎng)景sql配置

2021-09-26 09:16:45

RedisGeo 類型數(shù)據(jù)類型

2021-05-10 11:55:57

ThreadLocal內(nèi)存Java

2019-08-07 06:16:28

物聯(lián)網(wǎng)IOT技術(shù)

2017-05-05 08:12:51

Spark共享變量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产小视频一区| 免费a v网站| 麻豆传媒在线完整视频| 九色|91porny| 欧美精品制服第一页| 在线观看中文av| 丝袜美女在线观看| 99久久婷婷国产综合精品电影| 性色av香蕉一区二区| 中文字幕丰满乱子伦无码专区| 精品三区视频| 一区二区三区国产精品| 久久综合九色综合久99| 国产偷人爽久久久久久老妇app| 天堂网在线观看国产精品| 欧美精品丝袜中出| youjizz.com在线观看| 色就是色亚洲色图| 午夜亚洲影视| 久久久精品在线观看| 精品人妻二区中文字幕| 免费欧美电影| 亚洲午夜久久久| 欧洲av一区| 黄色a在线观看| 人人超碰91尤物精品国产| 欧美刺激性大交免费视频| 91精品国产自产| 日韩激情综合| 欧美私人免费视频| 欧美二区在线视频| www免费在线观看| 久久久久99精品国产片| 18成人免费观看网站下载| 久久久精品99| 99久久综合狠狠综合久久aⅴ| 亚洲韩国日本中文字幕| 911福利视频| 日韩av超清在线观看| 亚洲综合精品久久| 一区在线电影| 国产专区在线| 99视频精品免费视频| 亚洲在线观看视频| 天天操天天干天天摸| 亚洲激情亚洲| 久久综合久久综合久久综合| 亚洲丁香久久久| 五月婷婷之婷婷| 日韩pacopacomama| 亚洲小说欧美激情另类| 午夜在线视频免费观看| 成年人在线免费观看| 国产成人av电影| 亚洲精品日产aⅴ| 国产又大又粗又长| 麻豆国产精品一区二区三区| 日本成人免费在线| 五月天婷婷久久| 亚洲精品乱码| 97超级碰碰碰| 天堂在线免费观看视频| 亚洲理论在线| 国内精品久久久久久| 私库av在线播放| 欧美一区二区三区另类| 久久精品最新地址| 丁香花五月激情| 亚洲xxx拳头交| 久久精品国产免费观看| 三级影片在线观看| 天天天综合网| 久久香蕉国产线看观看av| 日本黄色录像视频| 成人午夜国产| 久久精品99国产精品酒店日本| 欧美激情视频二区| 99久久久久久中文字幕一区| www.欧美免费| 永久免费看片视频教学| 91精品一区二区三区综合| 久久不射热爱视频精品| 欧美成人aaa片一区国产精品| 中文字幕日韩一区二区不卡 | 久久久国产午夜精品| 欧美一区二视频在线免费观看| 九一国产在线| 中文av一区二区| 美国av在线播放| 在线观看免费黄色| 亚洲精品国产一区二区三区四区在线 | 中文字幕日韩一区二区三区不卡| 久久亚洲天堂| 亚洲综合清纯丝袜自拍| 日韩中文字幕三区| 国产一区二区主播在线| 欧美日韩一级大片网址| 原创真实夫妻啪啪av| 女仆av观看一区| 亚洲香蕉在线观看| 日韩视频中文字幕在线观看| 亚洲狼人精品一区二区三区| 国产精品久久久av| 国产深喉视频一区二区| 99久久er热在这里只有精品66| 欧美成人一区二区在线| 欧美18一19xxx性| 亚洲成人www| 日本美女高潮视频| 亚洲va欧美va人人爽成人影院| 波多野在线观看| 婷婷夜色潮精品综合在线| 黑森林福利视频导航| 欧美大片网站| 亚洲国产中文字幕久久网 | 不卡一卡二卡三乱码免费网站| 久久五月天婷婷| 麻豆视频在线免费观看| 疯狂欧美牲乱大交777| 激情久久综合网| 免费精品国产| 欧美第一黄色网| 亚洲精品国产精品乱码视色| 久久国产麻豆精品| 久久久久久久有限公司| 18在线观看的| 欧美少妇一区二区| 欧美无人区码suv| 婷婷亚洲综合| 欧美最顶级丰满的aⅴ艳星| 国产日本精品视频| 亚洲国产激情av| 青青草成人免费在线视频| 99久久999| 亚洲国产精品推荐| 精品爆乳一区二区三区无码av| 国产一区二区高清| 国产精品久久国产精品| 欧美96在线| 欧美在线观看视频一区二区| 久久久久久久久久久国产精品| 亚洲人人精品| 久久精品国产一区二区三区日韩| 19禁羞羞电影院在线观看| 精品少妇一区二区三区视频免付费 | 亚洲精品**不卡在线播he| 26uuu另类亚洲欧美日本一| 无码国产色欲xxxx视频| 亚洲成人精品在线观看| 国产精品边吃奶边做爽| 久久综合亚州| 亚洲国产日韩综合一区| 国产国产一区| 久久中文字幕国产| 亚洲国产精品久久久久久6q| 亚洲午夜免费电影| 菠萝菠萝蜜网站| 久久深夜福利| 中文字幕一区二区三区四区五区六区 | 成人xxxxx色| 91美女精品| 亚洲精品自拍偷拍| 国产偷人爽久久久久久老妇app| 国产精品每日更新| 成年人网站av| 亚洲毛片播放| 日韩精品久久一区| 99视频有精品高清视频| 欧美激情国产日韩精品一区18| 日本xxxx人| 在线观看成人小视频| 国产极品美女在线| jizz一区二区| 国产精品igao| 欧美xxx在线观看| 久久精品国产一区二区三区日韩| 电影亚洲一区| 欧美精品在线观看| 黄色小视频在线免费观看| 在线播放91灌醉迷j高跟美女 | 91视频综合网| 91麻豆国产香蕉久久精品| 日本激情综合网| 国精品一区二区三区| 欧美午夜精品久久久久久蜜| 少妇高潮一区二区三区99| 国产做受高潮69| 在线免费观看黄色| 亚洲国产精品电影| 亚洲熟妇无码久久精品| 亚洲.国产.中文慕字在线| 日本美女xxx| 成人黄色在线网站| 亚欧激情乱码久久久久久久久| 欧美天天在线| 水蜜桃亚洲一二三四在线| 伊人精品综合| 国产精品视频自拍| av在线最新| 久久夜色精品亚洲噜噜国产mv| 香蕉视频911| 3atv一区二区三区| 国产亚洲久一区二区| 五月激情综合婷婷| 精品无码久久久久成人漫画| 久久无码av三级| 少妇伦子伦精品无吗| 久久国产综合精品| 熟妇人妻va精品中文字幕| 好看的av在线不卡观看| 亚洲午夜精品久久| 狠狠综合久久av一区二区蜜桃| 国产日韩三区| 一本一道久久a久久| 国产日韩精品电影| 3d欧美精品动漫xxxx无尽| 97在线免费视频| 男女羞羞视频在线观看| 另类少妇人与禽zozz0性伦| av中文在线| 一区二区在线免费视频| 色视频精品视频在线观看| 亚洲第一区第二区| 成人黄色免费视频| 欧美一区二区三区人| 亚洲视频久久久| 欧美日韩国产三级| 做爰视频毛片视频| 欧美系列在线观看| 中文字幕 人妻熟女| 91国在线观看| 亚洲av综合一区| 欧美亚洲动漫另类| 中文永久免费观看| 欧美日韩你懂的| 中文字幕在线观看第二页| 欧美色男人天堂| 在线播放精品视频| 欧美人体做爰大胆视频| 亚洲香蕉在线视频| 欧美丰满嫩嫩电影| 国产一区二区三区中文字幕| 欧美高清你懂得| 国产伦子伦对白视频| 欧美一区二区精品久久911| 国产成人三级一区二区在线观看一| 7777精品伊人久久久大香线蕉完整版 | 国产精品xxx在线观看www| 粉嫩一区二区三区四区公司1| 国产精品18毛片一区二区| 精品国产影院| 欧美日韩一区二区视频在线观看| 夜夜春成人影院| 亚洲国产精品一区在线观看不卡| 欧美成人直播| 真人做人试看60分钟免费| 亚洲另类黄色| 日本熟妇人妻中出| 99精品在线视频观看| 一区二区三区四区高清精品免费观看 | 日韩成人一区二区三区在线观看| 不要播放器的av网站| 久久在线精品| 中文字幕成人免费视频| 国产伦精一区二区三区| 黄色av电影网站| 26uuu成人网一区二区三区| 国产sm调教视频| 亚洲丝袜另类动漫二区| 麻豆国产尤物av尤物在线观看| 五月天国产精品| 中文字幕91爱爱| 国产精品狼人色视频一区| 国产污片在线观看| 激情久久av一区av二区av三区| 女人十八岁毛片| 欧美视频在线一区二区三区| 国产精品九九九九| 亚洲成**性毛茸茸| 免费在线黄色电影| 日韩中文字幕在线看| 亚洲制服国产| 欧美一区二区三区免费观看| 国产精品黄色片| 国产成人成网站在线播放青青| 亚洲+变态+欧美+另类+精品| 亚洲免费不卡| 亚洲黄色在线| 奇米影音第四色| av不卡一区二区三区| 来吧亚洲综合网| 日韩欧美国产黄色| h片在线免费看| 亚洲午夜久久久影院| 欧美xxxx视频| 国产日韩精品在线观看| 天堂在线精品| 欧美国产视频一区| 日本aⅴ精品一区二区三区 | 在线日本欧美| 国产伦精品一区二区三| 国产精品99视频| 国产在线观看福利| 国产91精品免费| 日本黄色激情视频| 欧美性猛交xxx| 亚洲精品国产精品国| 中文字幕在线成人| 国精产品一区二区三区有限公司| 亚洲xxxx视频| 中文字幕欧美日韩一区二区三区| 狠狠躁日日躁夜夜躁av| 亚洲欧美日韩在线高清直播| 成人区精品一区二区不卡| 国语对白做受69| 欧美a级大片在线| 一区二区不卡视频| 日韩和欧美一区二区| 人妻少妇精品视频一区二区三区| 一区二区三区在线观看网站| 中文字幕在线观看1| 亚洲系列中文字幕| 日本精品不卡| 久久精品一二三区| 亚洲经典在线看| 韩国三级视频在线观看| 亚洲男人天堂av网| 国产乱子伦精品无码码专区| 国产一区二区三区在线| 欧美日韩大片| 欧美裸体网站| 久久九九国产| 色无极影院亚洲| 色婷婷国产精品久久包臀| 午夜视频www| 国产91精品黑色丝袜高跟鞋| 九色丨蝌蚪丨成人| 怡红院av亚洲一区二区三区h| 成人av电影免费在线播放| 日产电影一区二区三区| 亚洲精品一区二区三区蜜桃下载| 男女羞羞视频在线观看| 欧美性jizz18性欧美| 91 中文字幕| 久久精品中文字幕免费mv| 91精品国产一区二区在线观看| 在线观看免费黄色片| 国产精品99久久久| 免费在线视频观看| 亚洲精品欧美日韩专区| 欧美天堂在线视频| 欧美激情乱人伦一区| 6080亚洲理论片在线观看| 成人免费a级片| 成人高清视频免费观看| 精品在线播放视频| 亚洲系列中文字幕| www.av欧美| 欧美日韩亚洲一区二| 亚洲欧美日韩动漫| 国产精品扒开腿做| 久久久9色精品国产一区二区三区| 999热精品视频| 亚洲成人av一区二区三区| 国产在线小视频| 91九色国产社区在线观看| 激情丁香综合| 国产交换配乱淫视频免费| 欧美日韩小视频| 日韩123区| 日本精品一区二区| 韩国三级中文字幕hd久久精品| 欧美黄色免费看| 精品丝袜一区二区三区| 国产精品xxx| 欧美黄网在线观看| 久久九九久久九九| 亚洲av无码国产精品永久一区| 91禁外国网站| 亚洲成人av| 插吧插吧综合网| 91精品国产综合久久福利软件| 波多野结衣视频一区二区| 久久久国产精品一区二区三区| 捆绑调教一区二区三区| 国产精品999久久久| 综合网中文字幕| caoporn成人免费视频在线| 人妻丰满熟妇av无码区app| 亚洲另类春色国产| 国产女人在线观看| 成人av资源网| 老司机精品视频导航| 日产精品久久久| 欧美成人午夜剧场免费观看| 亚洲宅男一区| 欧美性生交xxxxx| 欧美精品丝袜中出| 蜜桃精品在线| www.日本在线播放|