精品欧美一区二区三区在线观看 _久久久久国色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)

国产中文字幕视频| 国产毛片久久久久久| 你懂的在线观看| 日日摸夜夜添夜夜添国产精品 | 亚洲男人天堂av在线| yellow91字幕网在线| 97国产精品videossex| 国产精品夜色7777狼人| 久久综合综合久久| 欧美精品一区二区三区精品| 日韩美女一区二区三区四区| 国产偷人视频免费| 成人看片免费| 久久久久国产一区二区三区四区| 91青草视频久久| 亚洲欧美另类在线视频| 中文字幕一区二区三区在线视频 | 久久精品国产清高在天天线| 久久精品国产精品| 男女做爰猛烈刺激| 在线一区二区三区视频| 精品视频999| 97国产精东麻豆人妻电影| 黄色成人影院| 国产欧美精品一区二区色综合朱莉| 亚洲淫片在线视频| 18国产免费视频| 亚洲欧美日韩专区| 欧美激情精品久久久久| 国产稀缺精品盗摄盗拍| 精品国产精品国产偷麻豆| 亚洲国产成人精品久久久国产成人一区| 在线观看免费污视频| sese综合| 五月婷婷综合激情| 国产在线视频综合| 麻豆网站在线看| 国产欧美一区二区三区网站| 久热国产精品视频一区二区三区| 懂色av成人一区二区三区| 久久草av在线| 国产精品在线看| 销魂美女一区二区| 另类图片国产| 奇米四色中文综合久久| 91porny在线| 99精品视频免费全部在线| 欧美激情网友自拍| 久久久久成人网站| 黄色亚洲在线| 久久久久这里只有精品| 久久久国产精华液| 欧美天天在线| 欧美激情视频网| 精品视频久久久久| 国内精品久久久久国产盗摄免费观看完整版| 日韩一区二区福利| 小向美奈子av| 午夜精品久久久久99热蜜桃导演| 不卡毛片在线看| 青青草手机视频在线观看| 亚洲精品一区二区在线看| 久久精品久久久久久| 欧美被狂躁喷白浆精品| 欧美激情综合| 992tv成人免费视频| www.日本精品| 久久午夜av| 国产精品青草久久久久福利99| 中文字幕av网站| 久久精品国产秦先生| 成人福利视频在线观看| 国产黄频在线观看| 99久久精品国产导航| 久久综合入口| 免费黄色网址在线观看| 亚洲狼人国产精品| 僵尸世界大战2 在线播放| 国模私拍一区二区国模曼安| 日韩欧美在线视频观看| 在线免费观看视频黄| 国产一区二区三区免费观看在线 | 国产精品一区二区欧美| 午夜激情小视频| 亚洲国产精品黑人久久久| 特色特色大片在线| 中文在线免费二区三区| 精品视频一区 二区 三区| 手机看片国产精品| 人体久久天天| 精品国内自产拍在线观看| 欧美日韩一级在线观看| 免费亚洲一区| 亚洲iv一区二区三区| 亚洲色图21p| 中文字幕亚洲不卡| 日本在线xxx| 快播电影网址老女人久久| 在线观看免费亚洲| 老司机午夜免费福利| 日韩欧美综合| 91精品国产99| 99久久夜色精品国产亚洲| 337p粉嫩大胆色噜噜噜噜亚洲| 在线视频不卡一区二区三区| yellow字幕网在线| 555www色欧美视频| 亚洲国产精品自拍视频| 午夜片欧美伦| 国产精品av电影| 国产综合在线播放| 日韩美女久久久| 欧美两根一起进3p做受视频| 国产suv精品一区| 久久天天躁狠狠躁夜夜av| 亚洲欧美另类在线视频| 粉嫩嫩av羞羞动漫久久久| 亚洲精品永久www嫩草| 欧美aa在线观看| 日韩视频在线观看一区二区| 中文字幕精品亚洲| 久久天天综合| 麻豆亚洲一区| 97超碰免费在线| 欧美一级欧美一级在线播放| 18精品爽国产三级网站| 毛片一区二区| 精品麻豆av| caoprom在线| 日韩视频免费观看高清在线视频| 18啪啪污污免费网站| 免费在线观看成人av| 国产乱人伦精品一区二区| gogogogo高清视频在线| 欧美日韩免费在线视频| 亚洲国产日韩一区无码精品久久久| 99国产精品久久久久久久| 91gao视频| 国产成人l区| 在线播放91灌醉迷j高跟美女| 性の欲びの女javhd| 久久精品观看| 欧美一级爽aaaaa大片| 中日韩脚交footjobhd| 精品视频在线导航| 黄色在线视频网址| 久久综合久久综合亚洲| 久久综合色视频| 西野翔中文久久精品国产| 97精品免费视频| 天天操天天爱天天干| 亚洲福利视频导航| 挪威xxxx性hd极品| 亚洲国产一区二区三区a毛片| 成人动漫视频在线观看免费| 美女航空一级毛片在线播放| 欧美videossexotv100| 青青草偷拍视频| 不卡影院免费观看| 能在线观看的av| 红桃成人av在线播放| 国产精品三级久久久久久电影| 二区在线视频| 欧美久久久久免费| 国产黄色片在线免费观看| 国产成人av一区二区三区在线观看| wwwwww欧美| 精品久久97| 青青草原成人在线视频| 爱爱爱免费视频在线观看| 欧美日韩视频在线第一区| 国产精品白丝喷水在线观看| 国产91综合网| 青青草原av在线播放| 日韩久久精品| 99在线看视频| 中文不卡1区2区3区| 中文字幕欧美日韩va免费视频| 国产精品欧美亚洲| 欧美日韩国产精品一区二区三区四区 | 日本黄色三级网站| 99精品热6080yy久久| 日韩在线三级| 日韩成人久久| 欧美在线视频观看| 麻豆视频网站在线观看| 欧美精品一区二区三区一线天视频| 少妇太紧太爽又黄又硬又爽| 国产精品福利影院| 稀缺呦国内精品呦| 免费久久99精品国产| 国产一区二区三区在线免费| 国产成人一区二区三区影院| 亚洲影视九九影院在线观看| 韩日成人影院| 久久成人精品电影| 免费在线黄色网址| 日韩一区二区三区视频| 秋霞精品一区二区三区| 樱花影视一区二区| 欧美黄色高清视频| 成人免费电影视频| 一本一道久久a久久综合蜜桃| 99xxxx成人网| 成人在线免费观看视频网站| 成人激情电影在线| 久久国产精品亚洲va麻豆| 国产不卡精品| 国产精品久久久久久av福利软件| 懂色av一区| 久久精品美女视频网站| 久久经典视频| 亚洲福利在线视频| a天堂在线视频| 欧美巨大另类极品videosbest| 国产一区二区视频网站| 亚洲国产另类av| 国产67194| 国产精品欧美综合在线| 久久精品一区二区免费播放| 成人的网站免费观看| 一区二区久久精品| 强制捆绑调教一区二区| 成年人网站大全| a91a精品视频在线观看| 欧美 亚洲 视频| 99久久视频| 一本久久a久久精品vr综合 | 成人免费毛片高清视频| 激情文学亚洲色图| 免费不卡在线观看| 无限资源日本好片| 日韩电影在线一区二区| 久久久久久久久久久免费视频| 亚洲精品护士| 日韩一级性生活片| 国内精品久久久久久久97牛牛| 中文字幕一区综合| 天堂美国久久| 久久精品国产精品亚洲精品色 | 久久精品青青大伊人av| 99精品老司机免费视频| 亚洲新声在线观看| 高清av在线| 综合136福利视频在线| 国产福利在线| 中文国产亚洲喷潮| 888av在线| 日韩中文字幕国产| 日本成人网址| 欧美成年人视频网站| 中文在线手机av| 欧美激情啊啊啊| 欧美草逼视频| 性欧美在线看片a免费观看| 免费看男女www网站入口在线 | 精品一区二区无码| 欧美一a一片一级一片| 亚洲熟女乱色一区二区三区久久久| 精品视频一区二区不卡| 国产精品女人久久久| 91精品国产欧美日韩| 精品国产99久久久久久宅男i| 日韩欧美国产综合在线一区二区三区| 超碰在线观看av| 精品国产乱码91久久久久久网站| 天堂中文在线官网| 亚洲一级一级97网| 麻豆最新免费在线视频| 欧美精品激情在线| 中文字幕这里只有精品| 国产精品免费小视频| 国产高清日韩| 黑人巨大精品欧美一区二区小视频| 欧美天堂影院| 偷拍视频一区二区| 欧美在线网站| 成年人视频观看| 美女视频黄a大片欧美| 日本中文字幕在线不卡| 91网站视频在线观看| 精品无码国产污污污免费网站| 国产精品乱码人人做人人爱| 九九九久久久久| 日本精品免费观看高清观看| 99热这里只有精品5| 精品视频在线播放| 动漫一区在线| 国产成人精品av| 久久在线观看| 欧美婷婷久久| 88国产精品视频一区二区三区| 亚洲国产精品无码观看久久| 丝袜国产日韩另类美女| 亚洲少妇一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 熟女少妇a性色生活片毛片| 舔着乳尖日韩一区| 在线观看国产精品视频| 亚洲精品videossex少妇| 美女羞羞视频在线观看| 欧美最近摘花xxxx摘花| 精品国产亚洲一区二区在线观看| 久久精品国产精品青草色艺| 久久精品影视| 国产精品天天av精麻传媒| 国产成人在线视频免费播放| 久久视频精品在线观看| 精品国产91乱高清在线观看| 国产美女自慰在线观看| 亚洲色图av在线| jizzjizz中国精品麻豆| 91视频国产高清| 欧美综合久久| 国产真实乱子伦| 成人美女视频在线观看18| 男人av资源站| 欧美在线观看视频一区二区三区| 色一情一乱一乱一区91av| 精品综合久久久久久97| 欧美aaaaaaaa| 亚洲成人18| 日日噜噜夜夜狠狠视频欧美人| 97人妻精品一区二区三区免费| 亚洲欧美国产77777| 一区二区视频在线免费观看| 亚洲欧美中文在线视频| 国产一二在线播放| 国产精品国产亚洲精品看不卡15 | 国产欧美一区二区在线观看| 99超碰在线观看| 亚洲国产97在线精品一区| 操喷在线视频| 国产视频不卡| 欧美成人嫩草网站| 五月天婷婷在线观看视频| 国产精品久久精品日日| 中文字幕自拍偷拍| 国产亚洲欧洲高清| 一呦二呦三呦精品国产| 欧美一区二区福利| 欧美中文字幕| 精品无人区无码乱码毛片国产| 日本韩国一区二区三区视频| 猫咪在线永久网站| 国产成人亚洲精品| 欧美日韩性在线观看| 国产精品视频分类| 国产精品美女久久久久久久久久久 | 国产精选一区二区| 日韩视频二区| 日本一区二区三区网站| 日韩欧美亚洲一二三区| 欧美另类自拍| 国产精品自在线| 亚洲国产老妈| 亚洲精品无码一区二区| 亚洲成av人片在线观看| 四虎在线视频免费观看| 91成人福利在线| 国产欧美日韩在线观看视频| 国产一级做a爰片久久| 亚洲欧美在线另类| 亚洲av永久无码国产精品久久| 国产做受高潮69| 国产不卡av一区二区| 做a视频在线观看| 亚洲资源在线观看| 欧美女子与性| 91深夜福利视频| 亚洲黄色天堂| 日本一级免费视频| 7777精品伊人久久久大香线蕉超级流畅| 国产精品久久久久久福利| 国产精品10p综合二区| 午夜综合激情| 五月天免费网站| 精品动漫一区二区三区在线观看| 国产精品伦理| 中文字幕日韩一区二区三区| 东方aⅴ免费观看久久av| 香蕉污视频在线观看| 久久天天躁夜夜躁狠狠躁2022| 91蝌蚪精品视频| 国产三级三级三级看三级| 亚洲日本在线观看| 日韩精品一二| 成人精品久久久| 性一交一乱一区二区洋洋av| 欧美一级特黄高清视频| 亚洲精品aⅴ中文字幕乱码| 日韩一级特黄| 91免费视频网站在线观看| 亚洲人吸女人奶水| 秋霞av在线| 亚洲最大福利视频网| 爽好久久久欧美精品| 黄色一级片在线免费观看| 国产一区二区三区久久精品| 91综合久久爱com|