国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

180615-精度計算BigDecimal

phodal / 2379人閱讀

摘要:文章鏈接精度計算精度計算目前接觸的業(yè)務(wù)中,對數(shù)據(jù)的精度要求比較高,因此不再使用基本的,改為用進行存儲和相關(guān)的計算,端午前的這一篇博文,則簡單的介紹下的使用姿勢,早點回家早點放假基本使用構(gòu)造方法幾個常見的構(gòu)造方式,將基本類型等,轉(zhuǎn)

文章鏈接:https://liuyueyi.github.io/hexblog/2018/06/15/180615-精度計算BigDecimal/

180615-精度計算BigDecimal

目前接觸的業(yè)務(wù)中,對數(shù)據(jù)的精度要求比較高,因此不再使用基本的float,double,改為用BigDecimal進行存儲和相關(guān)的計算,端午前的這一篇博文,則簡單的介紹下BigDecimal的使用姿勢,早點回家早點放假

I. 基本使用 1. 構(gòu)造方法

幾個常見的構(gòu)造方式,將基本類型+String等,轉(zhuǎn)換為BigDecimal對象

public BigDecimal(char[] in);
public BigDecimal(String val);
public BigDecimal(BigInteger val);
public BigDecimal(int val);
public BigDecimal(long val);
public BigDecimal(double val)
2. 加減乘除
public BigDecimal add(BigDecimal value);                        //加法

public BigDecimal subtract(BigDecimal value);                   //減法 

public BigDecimal multiply(BigDecimal value);                   //乘法

public BigDecimal divide(BigDecimal value);                     //除法

從上面的簽名上,可以看出操作是屬于鏈式結(jié)構(gòu)(Builder模式),然后一個問題就是執(zhí)行上面的操作之后,被調(diào)用的對象,是否會發(fā)生修改? (即下面的測試中的o值是否改變)

@Test
public void testBigDecimal() {
    BigDecimal o = new BigDecimal(11.1);
    BigDecimal d = new BigDecimal(1);

    System.out.println(o.add(d) + "| " + o);
}

輸出結(jié)果

12.0999999999999996447286321199499070644378662109375| 11.0999999999999996447286321199499070644378662109375

結(jié)論: 計算后的結(jié)果需要保存,因為不會修改目標對象的值

3. 精度

前面的例子中,輸出后面一長串,而這往往并不是我們希望的,所以可以設(shè)置下精度

public BigDecimal setScale(int newScale, RoundingMode roundingMode);

一個簡單的case如下

@Test
public void testBigDecimal() {
    BigDecimal o = new BigDecimal(11.1);
    System.out.println(o.setScale(3, RoundingMode.CEILING) + "| " + o);
}

輸出

11.100| 11.0999999999999996447286321199499070644378662109375

從上面的輸出,特別是第二列,如果我們選擇的精度方式是取下限,會不會有問題呢?

@Test
public void testBigDecimal() {
    BigDecimal o = new BigDecimal(11.1);
    System.out.println(o.setScale(1, RoundingMode.FLOOR) + "| " + o);
}

輸出結(jié)果為:

11.0| 11.0999999999999996447286321199499070644378662109375

所以需要注意的地方就來了,對浮點數(shù)進行精度設(shè)置時,需要根據(jù)自己的業(yè)務(wù)場景,選擇合適的取整方式,不然很容易出問題

取精度的幾個參數(shù)說明

ROUND_CEILING    //向正無窮方向舍入
ROUND_DOWN    //向零方向舍入
ROUND_FLOOR    //向負無窮方向舍入
ROUND_HALF_DOWN    //向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向下舍入, 例如1.55 保留一位小數(shù)結(jié)果為1.5
ROUND_HALF_EVEN    //向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,如果保留位數(shù)是奇數(shù),使用ROUND_HALF_UP,如果是偶數(shù),使用ROUND_HALF_DOWN
ROUND_HALF_UP    //向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數(shù)結(jié)果為1.6
ROUND_UNNECESSARY    //計算結(jié)果是精確的,不需要舍入模式
ROUND_UP    //向遠離0的方向舍入
II. 其他 1. 一灰灰Blog: https://liuyueyi.github.io/he...

一灰灰的個人博客,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書則不如,已上內(nèi)容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評指正,不吝感激

微博地址: 小灰灰Blog

QQ: 一灰灰/3302797840

3. 掃描關(guān)注

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71212.html

相關(guān)文章

  • BigDecimal 學習

    摘要:然而表示這個是的鍋,我不背。的表示一共的數(shù)字位能存儲個,表示存儲兩位小數(shù)。因為默認是保留兩位小數(shù),超過了精度,所以保存近似值。大范圍低精度存儲。很準確,采用科學計數(shù)法,損失精度,但能存儲更大范圍的數(shù)據(jù),但是精度有損失。 BigDecimal 為什么要使用這個呢?簡單點說就是商業(yè)要求精度計算,而double計算出來的結(jié)果,往往出人意料。 例子 Double運算 showImg(https...

    linkFly 評論0 收藏0
  • 精度數(shù)學運算

    摘要:使用,保證精度的同時,能精準的進行四舍六入計算。類精確的數(shù)學運算使用來實現(xiàn)精準度因為精度的原因構(gòu)造方法的結(jié)果有一定的不可預知性,例如因此建議使用。算法規(guī)則四舍六入五考慮,五后非零就進一,五后皆零看奇偶,五前為偶應舍去,五前為奇要進一。 四舍六入計算 算法規(guī)則: 四舍六入五考慮, 五后非零就進一, 五后皆零看奇偶, 五前為偶應舍去, 五前為奇要進一。 使用BigDecimal,保證精度的...

    liaosilzu2007 評論0 收藏0
  • 180706-BigDecimal除法的精度問題

    摘要:除法的精度問題在使用的除法時,遇到一個鬼畜的問題,本以為的精度計算,結(jié)果使用返回,當然最終發(fā)現(xiàn)還是自己的使用姿勢不對導致的,因此記錄一下,避免后面重蹈覆轍問題拋出在使用做高精度的除法時,一不注意遇到了一個小問題,如下上面的輸出是什么 showImg(https://segmentfault.com/img/remote/1460000015555232); BigDecimal除法的精...

    imccl 評論0 收藏0
  • Double精度丟失解決方案《淺談BigDecimal

    摘要:錯誤將導致不能漲薪。如果未指定舍入模式,并且無法表示準確結(jié)果,則拋出一個異常否則,通過向該操作提供適當?shù)膶ο螅梢詫σ堰x擇的精度和舍入模式執(zhí)行計算。使用此類例如,中的整數(shù)字段來表示舍入模式已過時應改為使用例如,的枚舉值。 為什么金額要使用BigDecimal而不使用Double? 在電商或者金融行業(yè),看似很小的誤差但是通過一番計算后會導致很大的誤差,誤差將演變?yōu)殄e誤。錯誤將導致不能漲薪...

    icattlecoder 評論0 收藏0
  • 使用BigDecimal處理Java中的小數(shù)

    摘要:在中處理帶小數(shù)的數(shù)據(jù)時,通常會碰到需要進行對數(shù)據(jù)進行四舍五入或者截取等操作。提供了一個的方法,很方便的幫助我們實現(xiàn)想要的操作。 在Java中處理帶小數(shù)的數(shù)據(jù)時,通常會碰到需要進行對數(shù)據(jù)進行四舍五入或者截取等操作。BigDecimal提供了一個setScale()的方法,很方便的幫助我們實現(xiàn)想要的操作。 通常用到的是下面的方法 setScale(int newScale, in...

    用戶84 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<