BigDecimal使用要點(diǎn)

今天檢查代碼,發(fā)現(xiàn)bigdecimal使用有錯(cuò)誤评雌,整理下,內(nèi)部分享直焙。

一景东、為什么用Bigdecimal

Java在直接進(jìn)行浮點(diǎn)型運(yùn)算時(shí),比較容易出現(xiàn)精度丟失的問題奔誓,導(dǎo)致意料之外的運(yùn)算結(jié)果斤吐;可以使用BigDecimal則提供的方法避免精度丟失。

二厨喂、注意事項(xiàng)

2.1和措、BigDecial是immutable的,就像String一樣蜕煌,它的所有操作都會(huì)生成一個(gè)新的對(duì)象派阱,所以

?amount.add( thisAmount );

是錯(cuò)誤的;而應(yīng)該是:

?amount = amount.add( thisAmount );

2.2幌绍、不要用equals方法來比較BigDecimal對(duì)象颁褂,因?yàn)樗膃quals方法會(huì)比較scale,如果scale不一樣傀广,它會(huì)返回false;例如:

?BigDecimal a = new BigDecimal("2.00");

?BigDecimal b = new BigDecimal("2.0");

?print(a.equals(b)); // false

所以你應(yīng)該使用compareTo()和signum()方法

?a.compareTo(b);? // returns (-1 if a < b), (0 if a == b), (1 if a > b)

?a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)

2.3彩届、構(gòu)造函數(shù)

BigDecimal a=new??BigDecimal("2.1");

BigDecimal b=new??BigDecimal(2.1);

這兩者是不同的伪冰,第一種推薦,因?yàn)榻Y(jié)果是可知的樟蠕;第二種贮聂,可能會(huì)出現(xiàn)2.099999999999999999999..這種double經(jīng)常出現(xiàn)的問題靠柑。

2.4、除法的用法吓懈,今天就出現(xiàn)這么一個(gè)exception歼冰,java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

我才檢查代碼.

BigDecimal a = new BigDecimal("2.0");

BigDecimal b = new BigDecimal("2");

BigDecimal c = new BigDecimal("3");

a.divide(b) 沒有問題

a.divide(c) 就會(huì)出現(xiàn)上面的異常耻警。

即出現(xiàn)無限小數(shù)就會(huì)異常隔嫡,必須指定小數(shù)位數(shù)

a.divide(c, 2)就沒有問題,所以我們必須指定小數(shù)位數(shù)甘穿。

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腮恩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子温兼,更是在濱河造成了極大的恐慌秸滴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件募判,死亡現(xiàn)場(chǎng)離奇詭異荡含,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)届垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門内颗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人敦腔,你說我怎么就攤上這事均澳。” “怎么了符衔?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵找前,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我判族,道長(zhǎng)躺盛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任形帮,我火速辦了婚禮槽惫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辩撑。我一直安慰自己界斜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布合冀。 她就那樣靜靜地躺著各薇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪君躺。 梳的紋絲不亂的頭發(fā)上峭判,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天开缎,我揣著相機(jī)與錄音,去河邊找鬼林螃。 笑死奕删,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疗认。 我是一名探鬼主播完残,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼侮邀!你這毒婦竟也來了坏怪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绊茧,失蹤者是張志新(化名)和其女友劉穎铝宵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體华畏,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹏秋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亡笑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侣夷。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仑乌,靈堂內(nèi)的尸體忽然破棺而出百拓,到底是詐尸還是另有隱情,我是刑警寧澤晰甚,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布衙传,位于F島的核電站,受9級(jí)特大地震影響厕九,放射性物質(zhì)發(fā)生泄漏蓖捶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一扁远、第九天 我趴在偏房一處隱蔽的房頂上張望俊鱼。 院中可真熱鬧,春花似錦畅买、人聲如沸并闲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)焙蚓。三九已至,卻和暖如春洒宝,著一層夾襖步出監(jiān)牢的瞬間购公,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工雁歌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宏浩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓靠瞎,卻偏偏與公主長(zhǎng)得像比庄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乏盐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容