最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù)

 更新時間:2020年10月23日 14:56:38   作者:Marydon  
這篇文章主要介紹了Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù),幫助大家更好的處理浮點(diǎn)數(shù)數(shù)據(jù),感興趣的朋友可以了解下
/**
 * 進(jìn)行BigDecimal對象的加減乘除,四舍五入等運(yùn)算的工具類
 * 
 * @author Marydon
 * @createTime 2017年12月1日上午11:39:15
 * @updateTime
 * @Email:Marydon20170307@163.com
 * @description 由于Java的簡單類型不能夠精確的對浮點(diǎn)數(shù)進(jìn)行運(yùn)算,這個工具類提供了精確的浮點(diǎn)數(shù)運(yùn)算,包括加減乘除和四舍五入。
 * @version:1.0.0
 */
public class ArithmeticUtiles {

  /**
   * 進(jìn)行BigDecimal對象的加減乘除,四舍五入等運(yùn)算的工具類
   * 
   * @author wupenghui 由于Java的簡單類型不能夠精確的對浮點(diǎn)數(shù)進(jìn)行運(yùn)算,這個工具類提供精 確的浮點(diǎn)數(shù)運(yùn)算,包括加減乘除和四舍五入。
   */
  // 默認(rèn)除法運(yùn)算精度
  private static final int DEF_DIV_SCALE = 10;

  // 這個類不能實(shí)例化
  private ArithmeticUtiles() {
  }

  /**
   * 提供精確的加法運(yùn)算
   * 
   * @param v1
   *      被加數(shù)
   * @param v2
   *      加數(shù)
   * @return 兩個參數(shù)的和
   */
  public static double add(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.add(b2).doubleValue();
  }

  /**
   * 提供精確的減法運(yùn)算
   * 
   * @param v1
   *      被減數(shù)
   * @param v2
   *      減數(shù)
   * @return 兩個參數(shù)的差
   */
  public static double sub(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.subtract(b2).doubleValue();
  }

  /**
   * 提供精確的乘法運(yùn)算
   * 
   * @param v1
   *      被乘數(shù)
   * @param v2
   *      乘數(shù)
   * @return 兩個參數(shù)的積
   */
  public static double mul(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.multiply(b2).doubleValue();
  }

  /**
   * 提供(相對)精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時,精確到 小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入
   * 
   * @param v1
   *      被除數(shù)
   * @param v2
   *      除數(shù)
   * @return 兩個參數(shù)的商
   */
  public static double div(double v1, double v2) {
    return div(v1, v2, DEF_DIV_SCALE);
  }

  /**
   * 提供(相對)精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時,由scale參數(shù)指定精度,以后的數(shù)字四舍五入。
   * 
   * @param v1
   *      被除數(shù)
   * @param v2
   *      除數(shù)
   * @param scale
   *      表示表示需要精確到小數(shù)點(diǎn)以后幾位。
   * @return 兩個參數(shù)的商
   */
  public static double div(double v1, double v2, int scale) {
    if (scale < 0) {
      throw new IllegalArgumentException("The scale must be a positive integer or zero");
    }
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }

  /**
   * 提供精確的小數(shù)位四舍五入處理。
   * 
   * @param v
   *      需要四舍五入的數(shù)字
   * @param scale
   *      小數(shù)點(diǎn)后保留幾位
   * @return 四舍五入后的結(jié)果
   */
  public static double round(double v, int scale) {
    if (scale < 0) {
      throw new IllegalArgumentException("The scale must be a positive integer or zero");
    }
    BigDecimal b = new BigDecimal(Double.toString(v));
    BigDecimal one = new BigDecimal("1");
    return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }

  /**
   * 提供精確的類型轉(zhuǎn)換(Float)
   * 
   * @param v
   *      需要被轉(zhuǎn)換的數(shù)字
   * @return 返回轉(zhuǎn)換結(jié)果
   */
  public static float convertsToFloat(double v) {
    BigDecimal b = new BigDecimal(v);
    return b.floatValue();
  }

  /**
   * 提供精確的類型轉(zhuǎn)換(Int)不進(jìn)行四舍五入
   * 
   * @param v
   *      需要被轉(zhuǎn)換的數(shù)字
   * @return 返回轉(zhuǎn)換結(jié)果
   */
  public static int convertsToInt(double v) {
    BigDecimal b = new BigDecimal(v);
    return b.intValue();
  }

  /**
   * 提供精確的類型轉(zhuǎn)換(Long)
   * 
   * @param v
   *      需要被轉(zhuǎn)換的數(shù)字
   * @return 返回轉(zhuǎn)換結(jié)果
   */
  public static long convertsToLong(double v) {
    BigDecimal b = new BigDecimal(v);
    return b.longValue();
  }

  /**
   * 返回兩個數(shù)中大的一個值
   * 
   * @param v1
   *      需要被對比的第一個數(shù)
   * @param v2
   *      需要被對比的第二個數(shù)
   * @return 返回兩個數(shù)中大的一個值
   */
  public static double returnMax(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(v1);
    BigDecimal b2 = new BigDecimal(v2);
    return b1.max(b2).doubleValue();
  }

  /**
   * 返回兩個數(shù)中小的一個值
   * 
   * @param v1
   *      需要被對比的第一個數(shù)
   * @param v2
   *      需要被對比的第二個數(shù)
   * @return 返回兩個數(shù)中小的一個值
   */
  public static double returnMin(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(v1);
    BigDecimal b2 = new BigDecimal(v2);
    return b1.min(b2).doubleValue();
  }

  /**
   * 精確對比兩個數(shù)字
   * 
   * @param v1
   *      需要被對比的第一個數(shù)
   * @param v2
   *      需要被對比的第二個數(shù)
   * 
   * @return 如果兩個數(shù)一樣則返回0,如果第一個數(shù)比第二個數(shù)大則返回1,反之返回-1
   */
  public static int compareTo(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(v1);
    BigDecimal b2 = new BigDecimal(v2);
    return b1.compareTo(b2);
  }

}

以上就是Java使用BigDecimal精確運(yùn)算浮點(diǎn)數(shù)的詳細(xì)內(nèi)容,更多關(guān)于Java 精確運(yùn)算浮點(diǎn)數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java JDBC連接Kerberos認(rèn)證的HIVE和Impala方式

    Java JDBC連接Kerberos認(rèn)證的HIVE和Impala方式

    本文主要介紹了HiveJDBC和ImpalaJDBC的使用方法,包括版本對應(yīng)、Maven安裝、主機(jī)名配置、端口開通、JDBC連接和Kerberos認(rèn)證等
    2025-02-02
  • Spring中的@Transactional的工作原理

    Spring中的@Transactional的工作原理

    這篇文章主要介紹了Spring中的@Transactional的工作原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • 利用Jmeter發(fā)送Java請求的實(shí)戰(zhàn)記錄

    利用Jmeter發(fā)送Java請求的實(shí)戰(zhàn)記錄

    JMeter是Apache組織的開放源代碼項(xiàng)目,它是功能和性能測試的工具,100%的用java實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于如何利用Jmeter發(fā)送Java請求的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • SpringBoot自動裝配原理詳解

    SpringBoot自動裝配原理詳解

    這篇文章主要介紹了SpringBoot自動裝配原理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-03-03
  • Java LinkedList源碼深入分析

    Java LinkedList源碼深入分析

    鏈表(Linkedlist)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會按線性的順序存儲數(shù)據(jù),而是在每一個節(jié)點(diǎn)里存到下一個節(jié)點(diǎn)的地址。鏈表可分為單向鏈表和雙向鏈表
    2022-08-08
  • Java API操作HDFS方法詳細(xì)講解

    Java API操作HDFS方法詳細(xì)講解

    這篇文章主要介紹了Java API操作Hdfs詳細(xì)示例,遍歷當(dāng)前目錄下所有文件與文件夾,可以使用listStatus方法實(shí)現(xiàn)上述需求,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Java單例模式、饑餓模式代碼實(shí)例

    Java單例模式、饑餓模式代碼實(shí)例

    這篇文章主要介紹了Java單例模式、饑餓模式代碼實(shí)例,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-05-05
  • java、android可用的rtp封包解包h264案例

    java、android可用的rtp封包解包h264案例

    這篇文章主要介紹了java、android可用的rtp封包解包h264案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 分布式調(diào)度XXL-Job整合Springboot2.X實(shí)戰(zhàn)操作過程(推薦)

    分布式調(diào)度XXL-Job整合Springboot2.X實(shí)戰(zhàn)操作過程(推薦)

    這篇文章主要介紹了分布式調(diào)度XXL-Job整合Springboot2.X實(shí)戰(zhàn)操作,包括定時任務(wù)的使用場景和常見的定時任務(wù),通過本文學(xué)習(xí)幫助大家該選擇哪個分布式任務(wù)調(diào)度平臺,對此文感興趣的朋友一起看看吧
    2022-04-04
  • 深入解析面向?qū)ο缶幊淘贘ava中的應(yīng)用小結(jié)

    深入解析面向?qū)ο缶幊淘贘ava中的應(yīng)用小結(jié)

    本文詳細(xì)介紹了面向?qū)ο缶幊痰幕靖拍?包括類和對象、封裝、繼承和多態(tài),通過具體的Java代碼示例,展示了如何在Java中應(yīng)用這些面向?qū)ο缶幊痰暮诵乃枷?感興趣的朋友跟隨小編一起看看吧
    2025-01-01

最新評論

东平县| 汾西县| 伊宁县| 西充县| 南川市| 南开区| 旬阳县| 岱山县| 扎鲁特旗| 睢宁县| 林州市| 巴中市| 舞钢市| 阿尔山市| 新巴尔虎左旗| 韶山市| 宁明县| 资源县| 道孚县| 讷河市| 山丹县| 哈密市| 叶城县| 皋兰县| 榕江县| 德阳市| 讷河市| 汕头市| 荆州市| 齐齐哈尔市| 海晏县| 涪陵区| 花莲县| 浪卡子县| 衡水市| 汕尾市| 鸡东县| 扶绥县| 化隆| 周至县| 陇南市|