A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如果程序中要求对double浮点数进行加减乘除基本运算,则需要先将double类型数值包装成BigDecimal对象,调用BigDecimal对象的方法执行运算后再讲结果转换成double型变量。这是比较繁琐的过程,可以考虑以BigDecimal为基础定义一个Arith工具类,该工具类代码如下:
  1. import java.math.BigDecimal;
  2. public class Arith {
  3.         // 默认除法运算精度
  4.         private static final int DEF_DIV_SCALE = 10;
  5.         // 构造器私有,让这个类不能实例化
  6.         private Arith() {}
  7.         /**
  8.          * 提供精确的加法运算。
  9.          *
  10.          * @param v1
  11.          *            被加数
  12.          * @param v2
  13.          *            加数
  14.          * @return 两个参数的和
  15.          */
  16.         public static double add(double v1, double v2) {
  17.                 BigDecimal b1 = BigDecimal.valueOf(v1);
  18.                 BigDecimal b2 = BigDecimal.valueOf(v2);
  19.                 return b1.add(b2).doubleValue();
  20.         }

  21.         /**
  22.          * 提供精确的减法运算。
  23.          *
  24.          * @param v1
  25.          *            被减数
  26.          * @param v2
  27.          *            减数
  28.          * @return 两个参数的差
  29.          */
  30.         public static double sub(double v1, double v2) {
  31.                 BigDecimal b1 = BigDecimal.valueOf(v1);
  32.                 BigDecimal b2 = BigDecimal.valueOf(v2);
  33.                 return b1.subtract(b2).doubleValue();
  34.         }

  35.         /**
  36.          * 提供精确的乘法运算。
  37.          *
  38.          * @param v1
  39.          *            被乘数
  40.          * @param v2
  41.          *            乘数
  42.          * @return 两个参数的积
  43.          */
  44.         public static double mul(double v1, double v2) {
  45.                 BigDecimal b1 = BigDecimal.valueOf(v1);
  46.                 BigDecimal b2 = BigDecimal.valueOf(v2);
  47.                 return b1.multiply(b2).doubleValue();
  48.         }

  49.         /**
  50.          * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位的数字四舍五入。
  51.          *
  52.          * @param v1
  53.          *            被除数
  54.          * @param v2
  55.          *            除数
  56.          * @return 两个参数的商
  57.          */
  58.         public static double div(double v1, double v2) {
  59.                 BigDecimal b1 = BigDecimal.valueOf(v1);
  60.                 BigDecimal b2 = BigDecimal.valueOf(v2);
  61.                 return b1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
  62.         }
  63. }
复制代码



测试代码:

运行结果:
0.05 + 0.01 = 0.06
1.0 - 0.42 = 0.58
4.015 * 100 = 401.5
123.3 / 100 = 1.233



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马