zoukankan      html  css  js  c++  java
  • BigDecimal类型、Long类型判断值是否相等,以及BigDecimal加减乘除

    //Long是需要比较精度的,所以要用longValue
    if
    (project.getFriendId().longValue() != friendId.longValue()) { return this.parseReturnMap(false, null, "项目的客户id与合同客户id不一致!"); } //注意判断非空 比较结果为 int 值
    if(project.getProjectPrice() == null || project.getProjectPrice().compareTo((BigDecimal) conInfo.get("SOAMOUNT")) != 0) { return this.parseReturnMap(false, null, "项目的总金额与合同总金额不一致!"); }

     BigDecimal类型(+ - * /)所用的属性

    11.10 BigDecimal类

    对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。BigDecimal类的常用方法如表11-15所示。

    public class PreciseCompute {
    //默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;
    
    /**
    * 提供精确的加法运算。
    * @param v1 被加数
    * @param v2 加数
    * @return 两个参数的和
    */
    
    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 被减数
    * @param v2 减数
    * @return 两个参数的差
    */
    
    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 被乘数
    * @param v2 乘数
    * @return 两个参数的积
    */
    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();
    }
    
    /**
    * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
    * 小数点以后10位,以后的数字四舍五入。
    * @param v1 被除数
    * @param v2 除数
    * @return 两个参数的商
    */
    
    public static double div(double v1, double v2) {
       return div(v1, v2, DEF_DIV_SCALE);
    }
    
    /**
    * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
    * 定精度,以后的数字四舍五入。
    * @param v1 被除数
    * @param v2 除数
    * @param scale 表示表示需要精确到小数点以后几位。
    * @return 两个参数的商
    */
    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();
    }
    
    /**
    * 提供精确的小数位四舍五入处理。
    * @param v 需要四舍五入的数字
    * @param scale 小数点后保留几位
    * @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 ne = new BigDecimal("1");
       return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    }

    表11-15 BigDecimal类的常用方法

    序号

       

    类型

       

    1

    public BigDecimal(double val)

    构造

    将double表示形式转换

    为BigDecimal

    2

    public BigDecimal(int val)

    构造

    将int表示形式转换为

    BigDecimal

    3

    public BigDecimal(String val)

    构造

    将字符串表示

    形式转换为BigDecimal

    4

    public BigDecimal add(BigDecimal augend)

    普通

    加法

    5

    public BigDecimal subtract(BigDecimal
    subtrahend)

    普通

    减法

    6

    public BigDecimal multiply(BigDecimal
    multiplicand)

    普通

    乘法

    7

    public BigDecimal divide(BigDecimal
    divisor)

    普通

    除法

    范例:进行四舍五入的四则运算

      1. package org.lxh.demo11.numberdemo;
      2. import java.math.BigDecimal;
      3. class MyMath {
      4.     public static double add(double d1, double d2)
        {        // 进行加法运算
      5.          BigDecimal b1 = new BigDecimal(d1);
      6.          BigDecimal b2 = new BigDecimal(d2);
      7.         return b1.add(b2).doubleValue();
      8.      }
      9.     public static double sub(double d1, double d2)
        {        // 进行减法运算
      10.          BigDecimal b1 = new BigDecimal(d1);
      11.          BigDecimal b2 = new BigDecimal(d2);
      12.         return b1.subtract(b2).doubleValue();
      13.      }
      14.     public static double mul(double d1, double d2)
        {        // 进行乘法运算
      15.          BigDecimal b1 = new BigDecimal(d1);
      16.          BigDecimal b2 = new BigDecimal(d2);
      17.         return b1.multiply(b2).doubleValue();
      18.      }
      19.     public static double div(double d1,
        double d2,int len) {// 进行除法运算
      20.          BigDecimal b1 = new BigDecimal(d1);
      21.          BigDecimal b2 = new BigDecimal(d2);
      22.         return b1.divide(b2,len,BigDecimal.
        ROUND_HALF_UP).doubleValue();
      23.      }
      24.     public static double round(double d,
        int len) {     // 进行四舍五入
      25. 操作
      26.          BigDecimal b1 = new BigDecimal(d);
      27.          BigDecimal b2 = new BigDecimal(1);
      28.         // 任何一个数字除以1都是原数字
      29.         // ROUND_HALF_UP是BigDecimal的一个常量,
        表示进行四舍五入的操作
      30.         return b1.divide(b2, len,BigDecimal.
        ROUND_HALF_UP).doubleValue();
      31.      }
      32. }
      33. public class BigDecimalDemo01 {
      34.     public static void main(String[] args) {
      35.          System.out.println("加法运算:" +
        MyMath.round(MyMath.add(10.345,
      36. 3.333), 1));
      37.          System.out.println("乘法运算:" +
        MyMath.round(MyMath.mul(10.345,
      38. 3.333), 3));
      39.          System.out.println("除法运算:" +
        MyMath.div(10.345, 3.333, 3));
      40.          System.out.println("减法运算:" +
        MyMath.round(MyMath.sub(10.345,
      41. 3.333), 3));
      42.      }
      43. }
  • 相关阅读:
    scp免密码登陆进行远程文件同步
    MAD(Median absolute deviation, 中位数绝对偏差)
    机器学习之评价准则RoC与PR
    最新HGVS基因突变命名规则速览
    Somatic vs Germline Mutations
    c/c++ 获取文件夹或目录下的文件
    诊断实验评估指标-灵敏度(sensitivity)特异度(specificity)准确度(accuracy)
    互斥量与条件变量(三步走战略)结合使用原理
    linux常用的时间获取函数(time,gettimeofday,clock_gettime,_ftime,localtime,strftime )
    dup和dup2应用实例(dup跟APUE有出入,close+dup=dup2?)
  • 原文地址:https://www.cnblogs.com/yeyuchangfeng/p/4580702.html
Copyright © 2011-2022 走看看