/** * 精确的浮点运算 * * */ 公开课算术 { /**默认除法运算精度 */ 私有静态最终 int DEF_DIV_SCALE = 10; /** 该类无法实例化 */ 私人算术() { } /** * 提供精确的加法运算。 * @param v1 被加数 * @param v2 加数 * @return 两个参数之和 */ 公共静态 BigDecimal add(BigDecimal v1, BigDecimal v2) { BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString()); 返回 b1.add(b2); } /** * 提供精确的减法运算。 * @param v1 被减数 * @param v2 减法 * @return 两个参数的差值 */ 公共静态 BigDecimal 子(BigDecimal v1,BigDecimal v2) { BigDecimal b1 = new BigDecimal(v1.toString());BigDecimal b2 = new BigDecimal(v2.toString()); 返回 b1.subtract(b2); } /** * 提供精确的乘法运算。 * @param v1 被乘数 * @param v2 乘数 * @return 两个参数的乘积 */ 公共静态 BigDecimal mul(BigDecimal v1, BigDecimal v2) { BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString());; 返回 b1.multiply(b2); } /** * 提供(相对)准确的除法运算。当除法无法完成时,除法运算精确到 * 小数点后保留10位小数,后续数字四舍五入。 * @param v1 股息 * @param v2除数 * @return 两个参数的商 */ 公共静态双div(BigDecimal v1,BigDecimal v2) { 返回 div(v1, v2, DEF_DIV_SCALE); } /** * 提供(相对)准确的除法运算。当发生无穷除法时,标度参数表示 * 固定精度,后续数字将四舍五入。 * @param v1 股息 * @param v2除数 * @paramscale表示需要精确到小数点后几位。 * @return 两个参数的商 */ 公共静态双div(BigDecimal v1,BigDecimal v2,int规模) { 如果(比例 < 0) {抛出新的 IllegalArgumentException( “比例必须是正整数或零”); } BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString());; if (b1.compareTo(www.sychzs.cn) == 0) { 返回 BigDecimal.ZERO.doubleValue(); } return b1.divide(b2,scale,RoundingMode.HALF_UP).doubleValue(); } /** * 提供精确的小数位舍入处理。 * @param v 需要四舍五入的数字 * @param scale 小数点后保留多少位小数? * @return 舍入结果 */ 公共静态双轮(双v,int规模) { 如果(比例 < 0) { 抛出新的 IllegalArgumentException( “比例必须是正整数或零”); } BigDecimal b = new BigDecimal(Double.toString(v)); BigDecimal一=www.sychzs.cn; return b.divide(one,scale,RoundingMode.HALF_UP).doubleValue(); }公共静态无效主(字符串[] args){ BigDecimal a = new BigDecimal("100"); BigDecimal b = new BigDecimal("20"); BigDecimal add = add(a, b); System.out.println("添加:"+add); BigDecimal sub = sub(a, b); System.out.println("减法:"+sub); BigDecimal mul = mul(a, b); System.out.println("乘:"+mul); 双div = div(a, b); System.out.println("除法:"+div); } }
测试结果:
加法:120
减法:80
乘法:2000
除法:5.0