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

Java使用BigDecimal精確運算浮點數(shù)

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

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

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

  /**
   * 提供精確的加法運算
   * 
   * @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();
  }

  /**
   * 提供精確的減法運算
   * 
   * @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();
  }

  /**
   * 提供精確的乘法運算
   * 
   * @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();
  }

  /**
   * 提供(相對)精確的除法運算,當發(fā)生除不盡的情況時,精確到 小數(shù)點以后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);
  }

  /**
   * 提供(相對)精確的除法運算。當發(fā)生除不盡的情況時,由scale參數(shù)指定精度,以后的數(shù)字四舍五入。
   * 
   * @param v1
   *      被除數(shù)
   * @param v2
   *      除數(shù)
   * @param scale
   *      表示表示需要精確到小數(shù)點以后幾位。
   * @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ù)點后保留幾位
   * @return 四舍五入后的結果
   */
  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();
  }

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

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

  /**
   * 提供精確的類型轉換(Long)
   * 
   * @param v
   *      需要被轉換的數(shù)字
   * @return 返回轉換結果
   */
  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精確運算浮點數(shù)的詳細內容,更多關于Java 精確運算浮點數(shù)的資料請關注腳本之家其它相關文章!

相關文章

  • Java JDBC連接Kerberos認證的HIVE和Impala方式

    Java JDBC連接Kerberos認證的HIVE和Impala方式

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

    Spring中的@Transactional的工作原理

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

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

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

    SpringBoot自動裝配原理詳解

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

    Java LinkedList源碼深入分析

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

    Java API操作HDFS方法詳細講解

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

    Java單例模式、饑餓模式代碼實例

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

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

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

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

    這篇文章主要介紹了分布式調度XXL-Job整合Springboot2.X實戰(zhàn)操作,包括定時任務的使用場景和常見的定時任務,通過本文學習幫助大家該選擇哪個分布式任務調度平臺,對此文感興趣的朋友一起看看吧
    2022-04-04
  • 深入解析面向對象編程在Java中的應用小結

    深入解析面向對象編程在Java中的應用小結

    本文詳細介紹了面向對象編程的基本概念,包括類和對象、封裝、繼承和多態(tài),通過具體的Java代碼示例,展示了如何在Java中應用這些面向對象編程的核心思想,感興趣的朋友跟隨小編一起看看吧
    2025-01-01

最新評論

青海省| 济宁市| 包头市| 杭锦后旗| 恩平市| 象州县| 津南区| 平陆县| 同心县| 迭部县| 托里县| 卓资县| 安西县| 东乡| 车险| 二连浩特市| 安龙县| 灵台县| 称多县| 五指山市| 拜城县| 荆州市| 海林市| 融水| 巴楚县| 揭东县| 宜兴市| 景东| 新安县| 娄烦县| 广州市| 普陀区| 威远县| 朔州市| 那坡县| 五原县| 定陶县| 宜川县| 贺兰县| 射阳县| 汽车|