BigDecimal使用案例

創(chuàng)建BigDecimal對(duì)象

創(chuàng)建BigDecimal對(duì)象常用的方式有2種:

BigDecimal a = BigDecimal.new Bigdecimal(1);
BigDecimal a1 = BigDecimal.valueOf(1);

不推薦使用new 關(guān)鍵字創(chuàng)建Bigdecimal對(duì)象蛇损。原因是當(dāng)new 的值是一個(gè)小數(shù)的時(shí)候,其真實(shí)的值并不是我們想要的值

BigDecimal b = new BigDecimal(1.1);
BigDecimal b1 = BigDecimal.valueOf(1.1);
System.out.println("new的值b: "+b);
System.out.println("valueOf()的值b1: "+b1);

輸出:

1.100000000000000088817841970012523233890533447265625
valueOf()的值b1: 1.1

這在比較大小的時(shí)候,很可能出現(xiàn)意想不到的結(jié)果霸旗。

加法

加法的方法有兩種芝囤,方法簽名如下:

public BigDecimal add(BigDecimal augend)
public BigDecimal add(BigDecimal augend, MathContext mc)

demo:

BigDecimal a = BigDecimal.valueOf(1);
BigDecimal b = BigDecimal.valueOf(1.5);
BigDecimal c = BigDecimal.valueOf(1.4);

BigDecimal addResult = a.add(b);
BigDecimal addResult1 = a.add(b,new MathContext(2));
BigDecimal addResult2 = a.add(b,new MathContext(1));
BigDecimal addResult3 = a.add(c,new MathContext(1));

System.out.println("addResult: "+addResult);
System.out.println("addResult1: "+addResult1);
System.out.println("addResult2: "+addResult2);
System.out.println("addResult3: "+addResult3);

result:

addResult: 2.5
addResult1: 2.5
addResult2: 3
addResult3: 2

mc 設(shè)置保留幾位小數(shù),舍入按四舍五入

減法

方法簽名如下:

public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal subtract(BigDecimal subtrahend, MathContext mc)

demo:

BigDecimal a = BigDecimal.valueOf(1);
BigDecimal b = BigDecimal.valueOf(1.5);
BigDecimal c = BigDecimal.valueOf(1.4);

BigDecimal subtract = a.subtract(b);
BigDecimal subtract1 = a.subtract(b,new MathContext(2));
BigDecimal subtract2 = a.subtract(b,new MathContext(1));
BigDecimal subtract3 = a.subtract(c,new MathContext(1));

System.out.println("subtract: "+subtract);
System.out.println("subtract1: "+subtract1);
System.out.println("subtract2: "+subtract2);
System.out.println("subtract3: "+subtract3);

result:

subtract: -0.5
subtract1: -0.5
subtract2: -0.5
subtract3: -0.4

乘法:
方法簽名:

public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)

demo:

BigDecimal a = BigDecimal.valueOf(1);
BigDecimal b = BigDecimal.valueOf(1.5);
BigDecimal c = BigDecimal.valueOf(1.4);

BigDecimal multiply = a.multiply(b);
BigDecimal multiply1 = a.multiply(b,new MathContext(2));
BigDecimal multiply2 = a.multiply(b,new MathContext(1));
BigDecimal multiply3 = a.multiply(c,new MathContext(1));

System.out.println("multiply: "+multiply);
System.out.println("multiply1: "+multiply1);
System.out.println("multiply2: "+multiply2);
System.out.println("multiply3: "+multiply3);

result:

multiply: 1.5
multiply1: 1.5
multiply2: 2
multiply3: 1

除法:

public BigDecimal divide(BigDecimal divisor)
public BigDecimal divide(BigDecimal divisor, MathContext mc)
public BigDecimal divide(BigDecimal divisor, int roundingMode)
public BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

其中 public BigDecimal divide(BigDecimal divisor) 不推薦使用犬缨。idea警告如下:

Inspection info: Reports calls to divide() or setScale() without a rounding mode argument. Such calls can lead to an ArithmeticException when the exact value cannot be represented in the result (e.g. because it has a non-terminating decimal expansion). Specifying a rounding mode prevents the ArithmeticException.

翻譯:
檢查信息:報(bào)告調(diào)用divide()或setScale(),而不帶舍入模式參數(shù)棉浸。當(dāng)結(jié)果中不能表示精確值時(shí)怀薛,這種調(diào)用可能導(dǎo)致算術(shù)異常(例如,因?yàn)樗哂袩o限的十進(jìn)制展開)迷郑。指定舍入模式可以防止算術(shù)異常枝恋。

簡(jiǎn)單點(diǎn)說就是除不盡的時(shí)候會(huì)報(bào)錯(cuò)

所以用除法的時(shí)候创倔,我們需要指定其舍入模式。推薦使用:

public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

指定舍入模式焚碌,和保留幾位小數(shù)

demo:

BigDecimal divide = a.divide(b, 2, BigDecimal.ROUND_HALF_UP);
System.out.println("divide: "+divide);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畦攘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子十电,更是在濱河造成了極大的恐慌知押,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹃骂,死亡現(xiàn)場(chǎng)離奇詭異台盯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)畏线,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門静盅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人象踊,你說我怎么就攤上這事温亲。” “怎么了杯矩?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵栈虚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我史隆,道長(zhǎng)魂务,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任泌射,我火速辦了婚禮粘姜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘熔酷。我一直安慰自己孤紧,他們只是感情好闻蛀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布知给。 她就那樣靜靜地躺著,像睡著了一般鹦倚。 火紅的嫁衣襯著肌膚如雪躺酒。 梳的紋絲不亂的頭發(fā)上押蚤,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音羹应,去河邊找鬼揽碘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雳刺。 我是一名探鬼主播劫灶,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掖桦!你這毒婦竟也來了浑此?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤滞详,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后紊馏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體料饥,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年朱监,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岸啡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赫编,死狀恐怖巡蘸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擂送,我是刑警寧澤悦荒,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站嘹吨,受9級(jí)特大地震影響搬味,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蟀拷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一碰纬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧问芬,春花似錦悦析、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炕柔,卻和暖如春酌泰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匕累。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工陵刹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欢嘿。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓衰琐,卻偏偏與公主長(zhǎng)得像也糊,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子羡宙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡(jiǎn)單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,106評(píng)論 0 21
  • 1. BigDecimal簡(jiǎn)介 ??Java中狸剃,如果涉及到大的整數(shù)或者大的小數(shù)的計(jì)算的時(shí)候,比如long整數(shù)與lo...
    騎著烏龜去看海閱讀 3,714評(píng)論 0 1
  • 一.bigdecimal 基本算法 加狗热,減钞馁,乘,除匿刮,BigDecimal類提供了相應(yīng)的成員方法僧凰。 1 public...
    sugarsun閱讀 1,888評(píng)論 0 0
  • 8.18 這幾天心情很不好,今晚終于和我媽一吐為快了 主要覺得自己的人際關(guān)系一直怎樣都處理不好熟丸,保護(hù)不好自己训措,不能...
    janellywell閱讀 200評(píng)論 0 0
  • 初見你 小叮當(dāng) 初次見你是在跟男友大吵一架后,他把你送到我身邊光羞。那天晚上吵架吵的很厲害绩鸣,我很生氣就關(guān)機(jī)睡覺。睡到...
    大飛i閱讀 259評(píng)論 0 3