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则向下舍

  • 相关阅读:
    【51NOD 1478】括号序列的最长合法子段
    【BZOJ 3527】【ZJOI 2014】力
    【BZOJ 2194】快速傅立叶之二
    【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶
    【BZOJ 2693】jzptab
    【BZOJ 2154】Crash的数字表格
    【BZOJ 3529】【SDOI 2014】数表
    【BZOJ 2820】YY的GCD
    【BZOJ 2301】【HAOI 2011】Problem b
    【POJ 3294】Life Forms 不小于k个字符串中的最长子串
  • 原文地址:https://www.cnblogs.com/corolcorona/p/6647284.html
Copyright © 2011-2022 走看看