zoukankan      html  css  js  c++  java
  • bigdecimal更精确的浮点处理方式

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位内有效数,超过16位,double可能会出现内存溢出。

    导入包:

    import  java.math.BigDecimal;

    1.初始化:

    创建一个数值为0的BigDecimal  

    BigDecimal  YSJE = BigDecimal.ZERO;
    
    BigDecimal  SUM = new BigDecimal(0);

    创建一个数值不为0的BigDecimal   

    BigDecimal  SUM = new BigDecimal(10.00);

    2.运算

    SUM = SUM.add(YSJE);//
    
    String TAX ="10.00";
    
    SUM = SUM.subtract(new BigDecimal(TAX));//

    add(BigDecimal)        BigDecimal对象中的值相加,然后返回这个对象。

    subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。

    multiply(BigDecimal)  BigDecimal对象中的值相乘,然后返回这个对象。

    divide(BigDecimal)     BigDecimal对象中的值相除,然后返回这个对象。

    toString()                将BigDecimal对象的数值转换成字符串。

    doubleValue()          将BigDecimal对象中的值以双精度数返回。

    floatValue()             将BigDecimal对象中的值以单精度数返回。

    longValue()             将BigDecimal对象中的值以长整数返回。

    intValue()               将BigDecimal对象中的值以整数返回。

    3.做除数时需要给divide设置精确的小数点

    通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的,异常如下:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)

    解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)

     

    4.格式化小数点

    BigDecimal.setScale()方法用于格式化小数点

    setScale(1)表示保留一位小数,默认用四舍五入方式

    setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3

    setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4

    setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4

    setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

  • 相关阅读:
    [FJOI2016] 建筑师
    AtCoder
    [Poetize6] IncDec Sequence
    CodeForces
    洛谷 P4551 最长异或路径
    WC 2018/CTSC 2018/APIO 2018 游记
    洛谷 P4538 收集邮票
    「PKUWC 2018」随机算法 (60分部分分做法)
    bzoj 3718: [PA2014]Parking
    bzoj 1023: [SHOI2008]cactus仙人掌图 2125: 最短路 4728: 挪威的森林 静态仙人掌上路径长度的维护系列
  • 原文地址:https://www.cnblogs.com/corolcorona/p/6647284.html
Copyright © 2011-2022 走看看