欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java用BigDecimal解決double類型相減時可能存在的誤差

 更新時間:2020年05月15日 10:35:59   作者:liuhmmjj  
這篇文章主要介紹了Java用BigDecimal解決double類型相減時可能存在的誤差,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

double類型的兩個數(shù)相減可能存在誤差,比如System.out.println(2099 - 1999.9);的結(jié)果為99.09999999999991

可以用BigDecimal解決:

public class TestDouble {
  //兩個Double數(shù)相減
  public static Double sub(Double d1, Double d2) {
    if (d1 == null || d2 == null) {
      return null;
    }
    BigDecimal b1 = new BigDecimal(d1.toString());
    BigDecimal b2 = new BigDecimal(d2.toString());
    return b1.subtract(b2).doubleValue();
  }
 
  //兩個Double數(shù)相加
  public static Double add(Double d1, Double d2) {
    if (d1 == null || d2 == null) {
      return null;
    }
    BigDecimal b1 = new BigDecimal(d1.toString());
    BigDecimal b2 = new BigDecimal(d2.toString());
    return b1.add(b2).doubleValue();
  }
 
  //兩個Double數(shù)相除,并保留scale位小數(shù)
  public static Double div(Double d1, Double d2, int scale) {
    if (d1 == null || d2 == null || scale < 0) {
      return null;
    }
    BigDecimal b1 = new BigDecimal(d1.toString());
    BigDecimal b2 = new BigDecimal(d2.toString());
    return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }
 
  // 兩個Double數(shù)相乘
  public static Double mul(Double d1, Double d2) {
    if (d1 == null || d2 == null) {
      return null;
    }
    BigDecimal b1 = new BigDecimal(d1.toString());
    BigDecimal b2 = new BigDecimal(d2.toString());
    return b1.multiply(b2).doubleValue();
  }
 
  /**
   * 遇到.5的情況時往上近似
   *
   * @param d
   * @param scale
   * @return
   */
  public static Double setDoubleScale(Double d, int scale) {
    if (d == null || scale < 0) {
      return null;
    }
    BigDecimal b = new BigDecimal(d);
    return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }
 
  public static void main(String[] args) {
    Double d1 = 2099d;
    Double d2 = 1999.999;
    System.out.println(d1 - d2);
    System.out.println(sub(d1, d2));
    System.out.println("------------------------------------");
    System.out.println(d1 * d2);
    System.out.println(mul(d1, d2));
    System.out.println("------------------------------------");
    System.out.println(d1/d2);
    System.out.println(div(d1,d2,4));
 
  }
}

結(jié)果:

99.00099999999998
99.001
------------------------------------
4197997.901
4197997.901
------------------------------------
1.0495005247502625
1.0495

到此這篇關(guān)于Java用BigDecimal解決double類型相減時可能存在的誤差的文章就介紹到這了,更多相關(guān)Java double相減誤差內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot創(chuàng)建的web項目整合Quartz框架的項目實踐

    springboot創(chuàng)建的web項目整合Quartz框架的項目實踐

    本文主要介紹了springboot創(chuàng)建的web項目整合Quartz框架的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 詳解java中controller層是干什么的

    詳解java中controller層是干什么的

    Controller一般指的是MVC架構(gòu)里的控制層,是對項目里的功能做統(tǒng)一的調(diào)度,下面這篇文章主要給大家介紹了關(guān)于java中controller層是干什么的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • myeclipse導(dǎo)出可運行jar包簡介

    myeclipse導(dǎo)出可運行jar包簡介

    這篇文章主要介紹了myeclipse導(dǎo)出可運行jar包簡介,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Idea進(jìn)行pull的時候Your local changes would be overwritten by merge.

    Idea進(jìn)行pull的時候Your local changes would be

    這篇文章主要介紹了Idea進(jìn)行pull的時候Your local changes would be overwritten by merge.具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java面試題沖刺第二十一天--JVM

    Java面試題沖刺第二十一天--JVM

    這篇文章主要為大家分享了最有價值的三道關(guān)于JVM的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Spring?Bean后處理器詳細(xì)介紹

    Spring?Bean后處理器詳細(xì)介紹

    Bean后置處理器允許在調(diào)用初始化方法前后對Bean進(jìn)行額外的處理。可以在?Spring容器通過插入一個或多個BeanPostProcessor的實現(xiàn)來完成實例化,配置和初始化一個?bean?之后實現(xiàn)一些自定義邏輯回調(diào)方法
    2023-01-01
  • 解決lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的問題

    解決lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的問題

    這篇文章主要介紹了lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java虛擬機運行時棧的棧幀

    Java虛擬機運行時棧的棧幀

    本節(jié)將會介紹一下Java虛擬機棧中的棧幀,會對棧幀的組成部分(局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口)分別進(jìn)行介紹,最后還會通過javap命令反解析編譯后的.class文件,進(jìn)行分析方法執(zhí)行時的局部變量表、操作數(shù)棧等
    2021-09-09
  • Java動態(tài)初始化數(shù)組,元素默認(rèn)值規(guī)則詳解

    Java動態(tài)初始化數(shù)組,元素默認(rèn)值規(guī)則詳解

    動態(tài)初始化數(shù)組涉及先定義數(shù)組長度,后填充具體數(shù)據(jù),適用于數(shù)據(jù)量已知但具體值未定的情況,這種初始化方式允許程序運行過程中賦值,并會根據(jù)數(shù)據(jù)類型設(shè)定默認(rèn)值,如整型為0,字符串為null,動態(tài)初始化與靜態(tài)初始化格式不能混用
    2024-10-10
  • Django之多對多查詢與操作方法詳解

    Django之多對多查詢與操作方法詳解

    這篇文章主要介紹了Django之多對多查詢與操作方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論