BigDecimal使用案例

創(chuàng)建BigDecimal對象

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

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

不推薦使用new 關(guān)鍵字創(chuàng)建Bigdecimal對象。原因是當(dāng)new 的值是一個小數(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

這在比較大小的時候,很可能出現(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.

翻譯:
檢查信息:報告調(diào)用divide()或setScale(),而不帶舍入模式參數(shù)。當(dāng)結(jié)果中不能表示精確值時,這種調(diào)用可能導(dǎo)致算術(shù)異常(例如,因為它具有無限的十進制展開)。指定舍入模式可以防止算術(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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容